wxr
2024-08-27 bfb3d0d4879dca8c59ff287c92f5113162f3a33a
OnPro/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicSeriesSettingPage.cs
New file
@@ -0,0 +1,352 @@
using System;
using System.Collections.Generic;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
    public class LogicSeriesSettingPage :FrameLayout
    {
        FrameLayout bodyView;
        public LogicSeriesSettingPage()
        {
            bodyView = this;
        }
        public void LoadPage(List<Function> list)
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.HorseRaceLamp)).LoadTopView();
            bodyView.BackgroundColor = CSS.CSS_Color.BackgroundColor;
            VerticalScrolViewLayout contentView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(603 - 50),
            };
            bodyView.AddChidren(contentView);
            #region 找出所有序列的oid
            List<string> oidList = new List<string>();
            foreach (var rgb in list)
            {
                var oid = rgb.sid.Substring(0, 16);
                if (!oidList.Contains(oid))
                {
                    oidList.Add(oid);
                }
            }
            var seriesList = FunctionList.List.GetSeries();
            foreach(var temp in seriesList)
            {
                var oid = temp.sid.Substring(0, 16);
                if (!oidList.Contains(oid))
                {
                    oidList.Add(oid);
                }
            }
            #endregion
            //Dictionary<string, List<string>> deviceList = new Dictionary<string, List<string>>();
            //foreach(var oid in oidList)
            //{
            //    var sidList = FunctionList.List.
            //    if (!deviceList.ContainsKey(oid))
            //    {
            //        deviceList.Add(oid)
            //    }
            //}
            foreach(var oid in oidList)
            {
                Function rgb = null;
                rgb = list.Find((obj) => obj.sid.Substring(0, 16) == oid);
                if(rgb == null)
                {
                    rgb = FunctionList.List.GetLightList().Find((obj) => obj.spk == SPK.LightRGB && obj.sid.Substring(0, 16) == oid);
                    if (rgb == null)
                    {
                        rgb = FunctionList.List.GetLightList().Find((obj) => obj.spk == SPK.LightCCT && obj.sid.Substring(0, 16) == oid);
                        if (rgb == null)
                        {
                            rgb = FunctionList.List.GetLightList().Find((obj) => obj.spk == SPK.LightDimming && obj.sid.Substring(0, 16) == oid);
                        }
                    }
                }
                var titleView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(44),
                    BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                };
                contentView.AddChidren(titleView);
                titleView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS.CSS_Color.DividingLineColor, Gravity = Gravity.BottomCenter });
                var btnViewTitle = new Button()
                {
                    X = Application.GetRealWidth(16),
                    TextSize = CSS.CSS_FontSize.SubheadingFontSize,
                    IsBold = true,
                    Text = rgb.name,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS.CSS_Color.MainColor,
                };
                titleView.AddChidren(btnViewTitle);
                if (rgb.GetAttribute(FunctionAttributeKey.Colorful) != null)
                {
                    var autoColorfulView = new FrameLayout()
                    {
                        Height = Application.GetRealHeight(44),
                        BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                    };
                    contentView.AddChidren(autoColorfulView);
                    autoColorfulView.AddChidren(new Button() { Width = Application.GetRealWidth(343), Gravity = Gravity.BottomCenter, Height = 1, BackgroundColor = CSS.CSS_Color.DividingLineColor, Y = Application.GetRealHeight(44) - 1 });
                    Button btnAutoColorfulRight = new Button()
                    {
                        X = Application.GetRealWidth(339),
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetMinRealAverage(16),
                        Height = Application.GetMinRealAverage(16),
                        UnSelectedImagePath = "Public/Right.png",
                    };
                    autoColorfulView.AddChidren(btnAutoColorfulRight);
                    var btnAutoColorfulTitle = new Button()
                    {
                        X = Application.GetRealWidth(16),
                        TextAlignment = TextAlignment.CenterLeft,
                        TextSize = CSS.CSS_FontSize.TextFontSize,
                        TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                        TextID = StringId.Auto,
                    };
                    autoColorfulView.AddChidren(btnAutoColorfulTitle);
                    btnAutoColorfulTitle.MouseUpEventHandler = (sender, e) =>
                    {
                        LoadEditDialog_OnOff(rgb.sid, true);
                    };
                }
                var rgbSeriesList = seriesList.FindAll((obj) => obj.sid.Substring(0, 16) == rgb.sid.Substring(0, 16));
                foreach(var rgbSeries in rgbSeriesList)
                {
                    var colorfulView = new FrameLayout()
                    {
                        Height = Application.GetRealHeight(44),
                        BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                    };
                    contentView.AddChidren(colorfulView);
                    colorfulView.AddChidren(new Button() { Width = Application.GetRealWidth(343), Gravity = Gravity.BottomCenter, Height = 1, BackgroundColor = CSS.CSS_Color.DividingLineColor, Y = Application.GetRealHeight(44) - 1 });
                    Button btnColorfulRight = new Button()
                    {
                        X = Application.GetRealWidth(339),
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetMinRealAverage(16),
                        Height = Application.GetMinRealAverage(16),
                        UnSelectedImagePath = "Public/Right.png",
                    };
                    colorfulView.AddChidren(btnColorfulRight);
                    var btnColorfulTitle = new Button()
                    {
                        X = Application.GetRealWidth(16),
                        TextAlignment = TextAlignment.CenterLeft,
                        TextSize = CSS.CSS_FontSize.TextFontSize,
                        TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                        Text = rgbSeries.name,
                    };
                    colorfulView.AddChidren(btnColorfulTitle);
                    btnColorfulTitle.MouseUpEventHandler = (sender, e) =>
                    {
                        LoadEditDialog_OnOff(rgbSeries.sid);
                    };
                }
                contentView.AddChidren(new Button {
                    Height = Application.GetRealHeight(8),
                    BackgroundColor = CSS_Color.BackgroundColor,
                });
            }
        }
        /// <summary>
        /// 加载开关选择弹窗
        /// </summary>
        /// <param name="function"></param>
        /// <param name="btn"></param>
        void LoadEditDialog_OnOff(string sid, bool isRgb = false)
        {
            Dialog dialog = new Dialog();
            var pView = new FrameLayout()
            {
                BackgroundColor = CSS_Color.DialogTransparentColor1,
            };
            dialog.AddChidren(pView);
            var optionBaseView = new FrameLayout()
            {
                Y = Application.GetRealHeight(500),
                Height = Application.GetRealHeight(160),
                AnimateSpeed = 0.3f,
                Animate = Animate.DownToUp,
            };
            pView.AddChidren(optionBaseView);
            var optionView = new VerticalScrolViewLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(100),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                ScrollEnabled = false,
            };
            optionBaseView.AddChidren(optionView);
            var btnOn = new Button()
            {
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.On,
            };
            optionView.AddChidren(btnOn);
            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
            var btnOff = new Button()
            {
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = CSS_Color.TextualColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.OFF,
            };
            optionView.AddChidren(btnOff);
            var btnCancel = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(8) + optionView.Bottom,
                Width = Application.GetRealWidth(343),
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(12),
                TextID = StringId.Cancel,
                TextColor = CSS_Color.WarningColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
            };
            optionBaseView.AddChidren(btnCancel);
            dialog.Show();
            pView.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
            };
            btnCancel.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
            };
            btnOn.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
                Output outputDevice = new Output();
                outputDevice.target_type = "1";
                outputDevice.sid = sid;
                outputDevice.delay = "0";
                List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
                Dictionary<string, string> diction = new Dictionary<string, string>();
                if (isRgb)
                {
                    diction.Add("key", FunctionAttributeKey.Colorful);
                }
                else
                {
                    diction.Add("key", "on_off");
                }
                diction.Add("value", "on");
                dicSateteList.Add(diction);
                outputDevice.status = dicSateteList;
                var oldTemp = Logic.currlogic.output.Find((obj) => obj.sid.Substring(0, 16) == sid.Substring(0, 16));
                if (oldTemp != null)
                {
                    Logic.currlogic.output.Remove(oldTemp);
                }
                Logic.currlogic.output.Add(outputDevice);
                this.RemoveFromParent();
                LogicMethod.Current.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            btnOff.MouseUpEventHandler = (sender, e) => {
                dialog.Close();
                Output outputDevice = new Output();
                outputDevice.target_type = "1";
                outputDevice.sid = sid;
                outputDevice.delay = "0";
                List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
                Dictionary<string, string> diction = new Dictionary<string, string>();
                if (isRgb)
                {
                    diction.Add("key", FunctionAttributeKey.Colorful);
                }
                else
                {
                    diction.Add("key", "on_off");
                }
                diction.Add("value", "off");
                dicSateteList.Add(diction);
                outputDevice.status = dicSateteList;
                try
                {
                    var oldTemp = Logic.currlogic.output.Find((obj) => obj.sid != null && obj.sid.Length > 16 && obj.sid.Substring(0, 16) == sid.Substring(0, 16));
                    if (oldTemp != null)
                    {
                        Logic.currlogic.output.Remove(oldTemp);
                    }
                }catch(Exception ex)
                {
                    MainPage.Log($"自动化保存跑马灯数据异常:{ex.Message}");
                }
                Logic.currlogic.output.Add(outputDevice);
                this.RemoveFromParent();
                LogicMethod.Current.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
        }
    }
}