From 5b40f1da1d28616de3880857b38357eef7859b64 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期四, 26 十一月 2020 17:51:35 +0800
Subject: [PATCH] 2020-11-26-1

---
 HDL_ON/UI/UI2/3-Intelligence/Automation/DeviceFunList.cs |  256 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 195 insertions(+), 61 deletions(-)

diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/DeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/DeviceFunList.cs
index cb35527..05451be 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/DeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/DeviceFunList.cs
@@ -9,9 +9,13 @@
         {
             Tag = "Logic";
         }
-
-        public void Show(Entity.Function device, int index, bool edit)
+        /// <summary>
+        /// 琛ㄧず鏄�(鏉′欢/鐩爣)
+        /// </summary>
+        private string if_type;
+        public void Show(Entity.Function device, int index, bool edit, string str)
         {
+            if_type = str;
             #region 鐣岄潰甯冨眬
             this.BackgroundColor = CSS.CSS_Color.viewMiddle;
             LogicView.TopView topView = new LogicView.TopView();
@@ -29,23 +33,15 @@
             };
             this.AddChidren(fLayout);
             #endregion
-
+            //瀹氫箟涓�涓褰曢�変腑璁惧鐘舵�佸垪琛紱
+            List<Dictionary<string, string>> dicSateteList = new List<Dictionary<string, string>>();
             //瀹氫箟涓�涓彉閲忥紝璁板綍閫変腑鐘舵��
             string selectedState = "unknown";
-
-            Input inputdevice = new Input();
-            inputdevice.condition_type = "3";
-            inputdevice.sid = device.sid;
-
-
             switch (device.functionType)
             {
                 //寮�鍏崇伅鍏�
                 case FunctionType.Relay:
                     {
-                        
-
-
                         //for (int i = 0; i < device.function.Count; i++)
                         //{
                         //}
@@ -59,6 +55,7 @@
                         relayView.btnText.Width = Application.GetRealWidth(130);
                         relayView.btnLine.X = Application.GetRealWidth(16);
                         relayView.btnLine.Width = Application.GetRealWidth(343);
+                        relayView.btnState.Text = "";
                         fLayout.AddChidren(relayView.FLayoutView());
                         relayView.btnClick.MouseUpEventHandler += (sender, e) =>
                         {
@@ -78,6 +75,7 @@
                                 TextID = StringId.onLogic,
                                 Height = Application.GetRealHeight(44),
                                 Width = Application.GetRealWidth(343),
+
                             };
                             switchView.frameLayout.AddChidren(btnOn);
                             Button btnLine = new Button
@@ -103,13 +101,13 @@
                             LogicMethod.dictionary(dic, "key", "on_off");
                             LogicMethod.dictionary(dic, "comparator", "=");
                             LogicMethod.dictionary(dic, "data_type", "string");
-                            inputdevice.condition.Add(dic);
                             btnOn.MouseUpEventHandler += (sender2, e2) =>
                             {
                                 LogicMethod.dictionary(dic, "value", "on");
                                 RemView(relayFunView);
                                 relayView.btnState.TextID = StringId.onLogic;
                                 selectedState = device.functionType + "_on";
+                                AddDictionaryData(dicSateteList, "on_off", dic);
                             };
                             btnOff.MouseUpEventHandler += (sender3, e3) =>
                             {
@@ -117,29 +115,25 @@
                                 RemView(relayFunView);
                                 relayView.btnState.TextID = StringId.offLogic;
                                 selectedState = device.functionType + "_off";
+                                AddDictionaryData(dicSateteList, "on_off", dic);
                             };
+
+                            if (relayView.btnState.Text != "")
+                            {
+                                if (relayView.btnState.Text == btnOn.Text)
+                                {
+                                    btnOn.TextColor = CSS.CSS_Color.textConfirmColor;
+                                }
+                                else
+                                {
+                                    btnOff.TextColor = CSS.CSS_Color.textConfirmColor;
+                                }
+                            }
 
                         };
                         if (edit)
                         {
-                            Input inputs = Logic.currlogic.input[index];
-                            if (inputs.condition_type == "3")
-                            {
-                                List<Dictionary<string, string>> dicList = inputs.condition as List<Dictionary<string, string>>;
-                                foreach (var dic in dicList)
-                                {
-                                    string value = dic["value"];
-                                    if (value == "on")
-                                    {
-                                        relayView.btnState.Text = Language.StringByID(StringId.onLogic);
-
-                                    }
-                                    else
-                                    {
-                                        relayView.btnState.Text = Language.StringByID(StringId.offLogic);
-                                    }
-                                }
-                            }
+                            GetEditState(device, edit, index, relayView.btnState, null, null, null);
                         }
 
                     }
@@ -157,19 +151,50 @@
             this.AddChidren(saveView.FLayoutView());
             saveView.btnClick.MouseUpEventHandler += (sen, e) =>
             {
+
+
                 if (selectedState != "unknown")
                 {
-                    if (edit)
+                    if (if_type == LogicMethod.condition_if)
                     {
-                        //绉婚櫎鏃ф暟鎹�
-                        Logic.currlogic.input.RemoveAt(index);
-                        //鏂版暟鎹彃鍏ユ棫鏁版嵁鐨勪綅缃�;
-                        Logic.currlogic.input.Insert(index, inputdevice);
+
+                        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
                     {
-                        //娣诲姞涓�涓柊鐨勬椂闂寸偣鏉′欢
-                        Logic.currlogic.input.Add(inputdevice);
+                        Output outputDevice = new Output();
+                        outputDevice.target_type = "1";
+                        outputDevice.sid = device.sid;
+                        outputDevice.status = dicSateteList;
+                        if (edit)
+                        {
+                            //绉婚櫎鏃ф暟鎹�
+                            Logic.currlogic.output.RemoveAt(index);
+                            //鏂版暟鎹彃鍏ユ棫鏁版嵁鐨勪綅缃�;
+                            Logic.currlogic.output.Insert(index, outputDevice);
+                        }
+                        else
+                        {
+                            //娣诲姞涓�涓潯浠�
+                            AddTarget(outputDevice);
+                        }
                     }
                 }
                 else
@@ -182,7 +207,7 @@
                     this.RemoveFromParent();
                     return;
                 }
-                RemoveViewByTag("Logic");
+                LogicMethod.RemoveAllView();
                 AddLogic addLogic = new AddLogic();
                 MainPage.BasePageView.AddChidren(addLogic);
                 addLogic.Show();
@@ -196,40 +221,149 @@
         /// 绉婚櫎鎺т欢
         /// </summary>
         /// <param name="frame"></param>
-        public void RemView(FrameLayout frame)
+        private void RemView(FrameLayout frame)
         {
             frame.RemoveFromParent();
         }
-
-        public void GetState(Entity.Function device, bool edit, int index,Button button1,Button button2,Button button3,Button button4)
+        /// <summary>
+        /// 鏄剧ず缂栬緫涔嬪墠鐨勮澶囩姸鎬�
+        /// </summary>
+        /// <param name="device">缂栬緫璁惧</param>
+        /// <param name="edit">缂栬緫鐘舵��</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, bool edit, int index, Button button1, Button button2, Button button3, Button button4)
         {
-            if (edit)
+            var dicList = new List<Dictionary<string, string>>();
+            switch (if_type)
             {
-                Input inputs = Logic.currlogic.input[index];
-                var dicList = inputs.condition as List<Dictionary<string, string>>;
-                switch (device.functionType)
-                {
-                    //寮�鍏崇伅鍏�
-                    case FunctionType.Relay:
+                case LogicMethod.condition_if:
+                    {
+                        Input inputs = Logic.currlogic.input[index];
+                        dicList = inputs.condition as List<Dictionary<string, string>>;
+                    }
+                    break;
+                case LogicMethod.target_if:
+                    {
+                        Output outputs = Logic.currlogic.output[index];
+                        dicList = outputs.status as List<Dictionary<string, string>>;
+                    }
+                    break;
+            }
+            switch (device.functionType)
+            {
+                //寮�鍏崇伅鍏�
+                case FunctionType.Relay:
+                    {
+                        foreach (var dic in dicList)
                         {
-                            foreach (var dic in dicList)
+                            string value = dic["value"];
+                            if (value == "on")
                             {
-                                string value = dic["value"];
-                                //if (value == "on")
-                                //{
-                                //    relayView.btnState.Text = Language.StringByID(StringId.onLogic);
-
-                                //}
-                                //else
-                                //{
-                                //    relayView.btnState.Text = Language.StringByID(StringId.offLogic);
-                                //}
+                                button1.Text = Language.StringByID(StringId.onLogic);
+                            }
+                            else
+                            {
+                                button1.Text = Language.StringByID(StringId.offLogic);
                             }
                         }
-                        break;
+                    }
+                    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="target"></param>
+        private void AddTarget(Output target)
+        {
+            int indexValue = -1;
+            for (int i = 0; i < Logic.currlogic.output.Count; i++)
+            {
+                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);
+            }
+
         }
     }
 }

--
Gitblit v1.8.0