wei
2021-08-27 eda3fb873e59544ff36301b51e05aef64f87b0f9
HDL_ON/UI/UI2/3-Intelligence/Automation/AddTarget.cs
New file
@@ -0,0 +1,289 @@
using System;
using System.Collections.Generic;
using Shared;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
    public class AddTarget : FrameLayout
    {
        public AddTarget()
        {
            Tag = "Logic";
        }
        public void Show()
        {
            LogicView.TopView topView = new LogicView.TopView();
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
            {
                RemoveFromParent();
            };
            topView.topNameBtn.TextID = StringId.addtarget;
            FrameLayout viewLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64),
                Width = Application.GetRealWidth(LogicView.TextSize.view375),
                Height = Application.GetRealHeight(LogicView.TextSize.view667 - 64),
                BackgroundColor = CSS.CSS_Color.viewMiddle,
            };
            this.AddChidren(viewLayout);
            #region 功能
            //功能
            LogicView.SelectTypeView functionView = new LogicView.SelectTypeView();
            functionView.btnText.TextID = StringId.funLogic;
            functionView.btnIcon.UnSelectedImagePath = "LogicIcon/functionicon.png";
            viewLayout.AddChidren(functionView.FLayoutView());
            //场景
            LogicView.SelectTypeView sceneView= new LogicView.SelectTypeView();
            sceneView.frameLayout.Y = functionView.frameLayout.Bottom;
            sceneView.btnText.TextID = StringId.Scenes;
            sceneView.btnIcon.UnSelectedImagePath = "LogicIcon/scene.png";
            viewLayout.AddChidren(sceneView.FLayoutView());
            //安防
            LogicView.SelectTypeView securityView = new LogicView.SelectTypeView();
            securityView.frameLayout.Y = sceneView.frameLayout.Bottom;
            securityView.btnText.TextID = StringId.anfang;
            securityView.btnIcon.UnSelectedImagePath = "LogicIcon/security.png";
            viewLayout.AddChidren(securityView.FLayoutView());
            //延时
            LogicView.SelectTypeView delayView = new LogicView.SelectTypeView();
            delayView.frameLayout.Y = sceneView.frameLayout.Bottom;
            delayView.btnText.TextID = StringId.delayLogic;
            delayView.btnIcon.UnSelectedImagePath = "LogicIcon/time.png";
            //viewLayout.AddChidren(delayView.FLayoutView());
            #endregion
            #region  所有点击事件
            //功能点击事件
            functionView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                FunTpye funTpye = new FunTpye();
                MainPage.BasePageView.AddChidren(funTpye);
                funTpye.Show(LogicMethod.target_if);
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            //场景点击事件
            sceneView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                SceneMethod();
            };
            //安防点击事件
            securityView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                Security security = new Security();
                MainPage.BasePageView.AddChidren(security);
                security.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                //SecurityMethod(this);
            };
            //延时点击事件
            delayView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                FrameLayout fLayout = new FrameLayout
                {
                    BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
                };
                this.AddChidren(fLayout);
                Delayed(fLayout,false,1000);
            };
            #endregion
        }
        /// <summary>
        /// 添加场景
        /// </summary>
        public void SceneMethod()
        {
            var sceneList = LogicMethod.CurrLogicMethod.GetSceneList();
            List<string> nameList = new List<string>();
            for (int i = 0; i < sceneList.Count; i++) {
                var scene = sceneList[i];
                nameList.Add(scene.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(this, nameList,new List<string> { }, StringId.addSceneLogic, (index) =>
            {
                var sceneSelecetd = sceneList[index];
                Output outputDevice = new Output();
                outputDevice.target_type = "2";
                outputDevice.sid = sceneSelecetd.sid;
                //没啥作用,为了发送数据格式统一;
                outputDevice.status = new List<Dictionary<string, string>> { new Dictionary<string, string> { { "key", "scene" }, { "value", "0" } } };
                AddOutput(outputDevice);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 添加安防
        /// </summary>
        public void SecurityMethod(FrameLayout frameLayout, bool edit=false, int index1=-1)
        {
            List<string> stateList = new List<string>();
            if (edit&& index1 != -1) {
                Output output = Logic.currlogic.output[index1];
                var security = LogicMethod.CurrLogicMethod.GetSecurity(output.sid);
                stateList.Add(security.name);
            }
            var securityList = LogicMethod.CurrLogicMethod.GetSecurityList();
            List<string> nameList = new List<string>();
            for (int i = 0; i < securityList.Count; i++)
            {
                var security = securityList[i];
                nameList.Add(security.name);
            }
            PublicInterface publicInterface = new PublicInterface();
            publicInterface.FrameOrVv(frameLayout, nameList, stateList, StringId.addSecurityLogic,(index) =>
            {
                var securitySelecetd = securityList[index];
                Output outputDevice = new Output();
                outputDevice.target_type = "3";
                outputDevice.sid = securitySelecetd.sid;
                //没啥作用,为了发送数据格式统一;
                outputDevice.status = new List<Dictionary<string, string>> { new Dictionary<string, string> { { "key", "security" }, { "value", "0" } } };
                AddOutput(outputDevice,true);
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            });
        }
        /// <summary>
        /// 延时时间方法
        /// </summary>
        /// <param name="fLayout">在哪个界面显示</param>
        /// <param name="edit">(true=编辑;false=新建)</param>
        /// <param name="index">编辑条件的索引</param>
        public void Delayed(FrameLayout fLayout, bool edit, int index)
        {
            LogicView.TimeView timePointView = new LogicView.TimeView();
            timePointView.FLayoutView(fLayout);
            EventHandler<MouseEventArgs> RemovefLayout = (sender, e1) =>
            {
                //移除fLayout界面
                fLayout.RemoveFromParent();
            };
            //取消点击事件
            timePointView.btnCancel.MouseUpEventHandler += RemovefLayout;
            //加载数据界面的设置方法(列表互不联动)
            timePointView.mUIPickerView.setNPicker(timePointView.GethStringList0(), timePointView.GetmStringList(), null);
            //默认初始选中状态
            timePointView.mUIPickerView.setCurrentItems(0, 5, 0);
            //定义一个局部变量记录选中时间
            string timepoint = "00:05";
            if (edit)
            {
                Output output = Logic.currlogic.output[index];
                if (output.target_type == "4")
                {
                    List<Dictionary<string, string>> dicList = output.status as List<Dictionary<string, string>>;
                    foreach (var dic in dicList)
                    {
                        string timeValue = dic["value"];
                        int hIndex = timePointView.GetValueIndex(timeValue, 0, 1, timePointView.GethIntList());
                        int mIndex = timePointView.GetValueIndex(timeValue, 1, 0, timePointView.GetmIntList());
                        //更新初始状态
                        timePointView.mUIPickerView.setCurrentItems(hIndex, mIndex, 0);
                        timepoint = timeValue;
                    }
                }
            }
            //选中时间回调方法,时间变化一次回调一次
            timePointView.mUIPickerView.OnSelectChangeEvent += (index1, index2, index3) =>
            {
                string hour = timePointView.GethStringList0()[index1].Split(' ')[0];
                string minuet = timePointView.GetmStringList()[index2].Split(' ')[0];
                timepoint = hour + ":" + minuet;
            };
            //确定点击事件
            timePointView.btnConfirm.MouseUpEventHandler += (sender, e3) =>
            {
                if (timepoint=="00:00") {
                    //提示
                    return;
                }
                Output outputTime= new Output();
                outputTime.sid = LogicMethod.CurrLogicMethod.NewSid();
                outputTime.target_type = "4";
                Dictionary<string, string> dic = new Dictionary<string, string>();
                LogicMethod.CurrLogicMethod.dictionary(dic, "key", "delay");
                LogicMethod.CurrLogicMethod.dictionary(dic, "value", timepoint);
                outputTime.status.Add(dic);
                if (edit)
                {
                    //移除旧数据
                    Logic.currlogic.output.RemoveAt(index);
                    //新数据插入旧数据的位置;
                    Logic.currlogic.output.Insert(index, outputTime);
                }
                else
                {
                    //添加一个新的时间点条件
                    AddOutput(outputTime);
                }
                fLayout.RemoveFromParent();
                LogicMethod.CurrLogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
        }
        /// <summary>
        /// 添加目标
        /// </summary>
        /// <param name="target"></param>
        /// <param name="bool_if">表示启用不同条件</param>
        private void AddOutput(Output target,bool bool_if=false)
        {
            int indexValue = -1;
            for (int i = 0; i < Logic.currlogic.output.Count; i++)
            {
                if (bool_if)
                {
                    ///安防允许一种
                    if (Logic.currlogic.output[i].target_type == target.target_type)
                    {
                        indexValue = i;
                        break;
                    }
                }
                else
                {
                    if (Logic.currlogic.output[i].sid == target.sid)
                    {
                        indexValue = i;
                        break;
                    }
                }
            }
            if (indexValue != -1)
            {
                Logic.currlogic.output.RemoveAt(indexValue);
                Logic.currlogic.output.Insert(indexValue, target);
            }
            else
            {
                Logic.currlogic.output.Add(target);
            }
        }
    }
}