wei
2020-12-04 6ba43603ccd8868a4ee73e9b978b7cb20a5b2c52
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
New file
@@ -0,0 +1,305 @@
using System;
using Shared;
using System.Collections.Generic;
namespace HDL_ON.UI.UI2.Intelligence.Automation
{
    public class ConditionDeviceFunList : FrameLayout
    {
        public ConditionDeviceFunList()
        {
            Tag = "Logic";
        }
        /// <summary>
        /// 定义一个记录选中设备状态列表;
        /// </summary>
        private List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
        /// <summary>
        /// 定义一个变量,记录选中状态
        /// </summary>
        private string selectedState = "unknown";
        /// <summary>
        /// 定义一个变量,记录选中状态记录属性
        /// </summary>
        private string keyVlaue = "";
        public void Show(Entity.Function device, int index, bool edit)
        {
            #region 界面布局
            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
            LogicView.TopView topView = new LogicView.TopView();
            this.AddChidren(topView.FLayoutView());
            topView.clickBackBtn.MouseUpEventHandler += (e, sen) =>
            {
                RemoveFromParent();
            };
            topView.topNameBtn.Text = device.name;
            FrameLayout fLayout = new FrameLayout
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(667 - 64),
            };
            this.AddChidren(fLayout);
            #endregion
            switch (device.functionType)
            {
                //开关灯光 light.Switch
                case FunctionType.Dimmer:
                case FunctionType.RGB:
                case FunctionType.RGBW:
                case FunctionType.CCT:
                case FunctionType.Relay:
                //窗帘
                case FunctionType.Curtain:
                case FunctionType.RollerCurtain:
                case FunctionType.TrietexCurtain:
                //空调
                case FunctionType.AC:
                //地热
                case FunctionType.FloorHeating:
                    {
                        LogicView.FunTypeView lightSwitchView = new LogicView.FunTypeView();
                        lightSwitchView.btnText.TextID = StringId.switchLogic;
                        lightSwitchView.btnState.Text = "";
                        fLayout.AddChidren(lightSwitchView.FLayoutView());
                        lightSwitchView.btnClick.MouseUpEventHandler += (sender, e) =>
                        {
                            FrameLayout frame = new FrameLayout
                            {
                                BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
                            };
                            this.AddChidren(frame);
                            SwitchViewMethod(frame, device, lightSwitchView.btnState, 2);
                        };
                        if (edit)
                        {
                            GetEditState(device, index, lightSwitchView.btnState, null, null, null);
                        }
                    }
                    break;
            }
            #region  保存
            ///保存View
            LogicView.SaveView saveView = new LogicView.SaveView();
            saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            saveView.btnSave.TextID = StringId.completeLogic;
            this.AddChidren(saveView.FLayoutView());
            saveView.btnClick.MouseUpEventHandler += (sen, e) =>
            {
                if (selectedState != "unknown")
                {
                    Input inputDevice = new Input();
                    inputDevice.condition_type = "3";
                    inputDevice.sid = device.sid;
                    inputDevice.condition = dicSateteList;
                    if (edit)
                    {
                        //移除旧数据
                        Logic.currlogic.input.RemoveAt(index);
                        //新数据插入旧数据的位置;
                        Logic.currlogic.input.Insert(index, inputDevice);
                    }
                    else
                    {
                        //添加一个条件
                        AddCondition(inputDevice);
                    }
                }
                else
                {
                    if (!edit)
                    {
                        //提示用户
                        return;
                    }
                    this.RemoveFromParent();
                    return;
                }
                LogicMethod.RemoveAllView();
                AddLogic addLogic = new AddLogic();
                MainPage.BasePageView.AddChidren(addLogic);
                addLogic.Show();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            #endregion
        }
        /// <summary>
        /// 移除控件
        /// </summary>
        /// <param name="frame"></param>
        private void RemView(FrameLayout frame)
        {
            frame.RemoveFromParent();
        }
        /// <summary>
        /// 显示编辑之前的设备状态
        /// </summary>
        /// <param name="device">编辑设备</param>
        /// <param name="index">编辑数据的索引</param>
        /// <param name="button1">显示Btn</param>
        /// <param name="button2">显示Btn</param>
        /// <param name="button3">显示Btn</param>
        /// <param name="button4">显示Btn</param>
        private void GetEditState(Entity.Function device , int index, Button button1, Button button2, Button button3, Button button4)
        {
            Input inputs = Logic.currlogic.input[index];
            var dicList = inputs.condition as List<Dictionary<string, string>>;
            //清除之前旧数据
            dicSateteList.Clear();
            if (dicList.Count != 0)
            {
                //有数据重新赋值
                dicSateteList = dicList;
            }
            switch (device.functionType)
            {
                //开关灯光 light.Switch
                case FunctionType.Dimmer:
                case FunctionType.RGB:
                case FunctionType.RGBW:
                case FunctionType.CCT:
                case FunctionType.Relay:
                //窗帘
                case FunctionType.Curtain:
                case FunctionType.RollerCurtain:
                case FunctionType.TrietexCurtain:
                //空调
                case FunctionType.AC:
                //地热
                case FunctionType.FloorHeating:
                    {
                        foreach (var dic in dicList)
                        {
                            string value = dic["value"];
                            if (value == "on")
                            {
                                button1.Text = Language.StringByID(StringId.onLogic);
                            }
                            else
                            {
                                button1.Text = Language.StringByID(StringId.offLogic);
                            }
                        }
                    }
                    break;
            }
        }
        /// <summary>
        /// 添加选中数据
        /// </summary>
        /// <param name="dicList">存储数据列表</param>
        /// <param name="keyValue">识别设备</param>
        /// <param name="dictionary">选中数据</param>
        /// <returns></returns>
        private void AddDictionaryData(List<Dictionary<string, string>> dicList, string keyValue, Dictionary<string, string> dictionary)
        {
            int indexValue = -1;
            for (int i = 0; i < dicList.Count; i++)
            {
                var dic = dicList[i];
                if (dic.ContainsValue(keyValue))
                {
                    //判断是否存在
                    indexValue = i;
                    break;
                }
            }
            if (indexValue != -1)
            {
                //存在移除
                dicList.RemoveAt(indexValue);
                //重新添加
                dicList.Insert(indexValue, dictionary);
            }
            else
            {
                //新添加
                dicList.Add(dictionary);
            }
        }
        /// <summary>
        /// 添加条件
        /// </summary>
        /// <param name="input"></param>
        private void AddCondition(Input input)
        {
            int indexValue = -1;
            for (int i = 0; i < Logic.currlogic.input.Count; i++)
            {
                if (Logic.currlogic.input[i].sid == input.sid)
                {
                    indexValue = i;
                    break;
                }
            }
            if (indexValue != -1)
            {
                Logic.currlogic.input.RemoveAt(indexValue);
                Logic.currlogic.input.Insert(indexValue, input);
            }
            else
            {
                Logic.currlogic.input.Add(input);
            }
        }
        /// <summary>
        /// 开关功能展开界面
        /// </summary>
        /// <param name="frame"></param>
        /// <param name="device"></param>
        /// <param name="button"></param>
        /// <param name="len"></param>
        public void SwitchViewMethod(FrameLayout frame, Entity.Function device, Button button, int len)
        {
            LogicView.SwitchView switchView = new LogicView.SwitchView();
            switchView.FLayoutView(frame, len);
            Dictionary<string, string> dic = new Dictionary<string, string>();
            LogicMethod.dictionary(dic, "key", "on_off");
            LogicMethod.dictionary(dic, "comparator", "=");
            LogicMethod.dictionary(dic, "data_type", "string");
            keyVlaue = "on_off";
            switchView.btnOn.MouseUpEventHandler += (sender2, e2) =>
            {
                LogicMethod.dictionary(dic, "value", "on");
                button.TextID = StringId.onLogic;
                selectedState = device.functionType + "_on";
                AddDictionaryData(dicSateteList, keyVlaue, dic);
                RemView(frame);
            };
            switchView.btnOff.MouseUpEventHandler += (sender3, e3) =>
            {
                LogicMethod.dictionary(dic, "value", "off");
                button.TextID = StringId.offLogic;
                selectedState = device.functionType + "_off";
                AddDictionaryData(dicSateteList, keyVlaue, dic);
                RemView(frame);
            };
            if (button.Text != "")
            {
                if (button.Text == switchView.btnOn.Text)
                {
                    switchView.btnOn.TextColor = CSS.CSS_Color.textConfirmColor;
                }
                else if (button.Text == switchView.btnOff.Text)
                {
                    switchView.btnOff.TextColor = CSS.CSS_Color.textConfirmColor;
                }
            }
        }
    }
}