From 7467a843644aee00e5a4d91dd967cdb9e30f1985 Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期二, 15 十二月 2020 17:20:06 +0800
Subject: [PATCH] 20201215-3

---
 HDL_ON/Entity/Function/Scene.cs                                |   35 +
 HDL-ON_Android/Properties/AndroidManifest.xml                  |    2 
 HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs               |    1 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs             |  229 ++++++----
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs            |  171 +++++--
 HDL_ON/Entity/DB_ResidenceData.cs                              |    5 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs           |    4 
 HDL_ON/DAL/DriverLayer/Control_Udp.cs                          |    4 
 HDL_ON/Entity/FunctionList.cs                                  |  171 +++++++
 HDL_ON/Entity/Function/Function.cs                             |  268 ------------
 HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs     |    4 
 HDL_ON/UI/UI2/2-Classification/ClassificationPageBLL.cs        |    6 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs |  264 ++++++------
 HDL_ON/DAL/Server/HttpServerRequest.cs                         |    8 
 .vs/HDL_APP_Project/xs/UserPrefs.xml                           |   51 +-
 15 files changed, 614 insertions(+), 609 deletions(-)

diff --git a/.vs/HDL_APP_Project/xs/UserPrefs.xml b/.vs/HDL_APP_Project/xs/UserPrefs.xml
index 0af4d57..32bec03 100644
--- a/.vs/HDL_APP_Project/xs/UserPrefs.xml
+++ b/.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,21 +1,16 @@
 锘�<Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default">
   <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs">
     <Files>
-      <File FileName="HDL_ON/Entity/Function/Scene.cs" Line="262" Column="29" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs" Line="383" Column="25" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" Line="107" Column="29" />
-      <File FileName="HDL_ON/Entity/FunctionList.cs" Line="504" Column="47" />
-      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" Line="1957" Column="10" />
-      <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" Line="172" Column="1" />
-      <File FileName="HDL_ON/DAL/Server/NewAPI.cs" Line="372" Column="84" />
-      <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="829" Column="45" />
-      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="376" Column="1" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs" Line="100" Column="1" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs" Line="528" Column="27" />
-      <File FileName="HDL_ON/UI/UI2/1-HomePage/HomePage.cs" Line="909" Column="66" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs" Line="170" Column="43" />
-      <File FileName="HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs" Line="34" Column="30" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" Line="385" Column="43" />
+      <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs" Line="133" Column="1" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs" Line="888" Column="16" />
+      <File FileName="HDL_ON/UI/UI2/1-HomePage/HomePage.cs" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs" />
+      <File FileName="HDL_ON/Entity/Function/Function.cs" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListEditPage.cs" Line="475" Column="32" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
@@ -23,31 +18,22 @@
           <Node name="HDL_APP_Project" expanded="True">
             <Node name="HDL_ON" expanded="True">
               <Node name="DAL" expanded="True">
-                <Node name="DriverLayer" expanded="True" />
                 <Node name="Server" expanded="True" />
               </Node>
               <Node name="Entity" expanded="True">
                 <Node name="Function" expanded="True" />
               </Node>
               <Node name="UI" expanded="True">
-                <Node name="UI0-Public" expanded="True" />
                 <Node name="UI2" expanded="True">
-                  <Node name="1-HomePage" expanded="True" />
-                  <Node name="2-Classification" expanded="True">
-                    <Node name="ClassificationPage.cs" selected="True" />
-                  </Node>
                   <Node name="3-Intelligence" expanded="True">
-                    <Node name="Scene" expanded="True" />
+                    <Node name="Scene" expanded="True">
+                      <Node name="SceneEditPage.cs" selected="True" />
+                    </Node>
                   </Node>
                   <Node name="4-PersonalCenter" expanded="True">
                     <Node name="RoomListManage" expanded="True">
                       <Node name="AddRoom" expanded="True" />
                     </Node>
-                  </Node>
-                  <Node name="FuntionControlView" expanded="True">
-                    <Node name="AC" expanded="True" />
-                    <Node name="Electrical" expanded="True" />
-                    <Node name="FoolHeating" expanded="True" />
                   </Node>
                 </Node>
               </Node>
@@ -58,6 +44,11 @@
               </Node>
             </Node>
           </Node>
+        </State>
+      </Pad>
+      <Pad Id="MonoDevelop.Debugger.WatchPad">
+        <State>
+          <Value>sceneFunctionInfo</Value>
         </State>
       </Pad>
     </Pads>
@@ -71,8 +62,10 @@
   <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhone" />
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
     <BreakpointStore>
-      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/Function/Scene.cs" relfile="HDL_ON/Entity/Function/Scene.cs" line="292" column="1" />
-      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/Function/Scene.cs" relfile="HDL_ON/Entity/Function/Scene.cs" line="266" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/Function/Scene.cs" relfile="HDL_ON/Entity/Function/Scene.cs" line="285" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs" relfile="HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs" line="133" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" relfile="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" line="540" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" relfile="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" line="386" column="1" />
     </BreakpointStore>
   </MonoDevelop.Ide.DebuggingService.Breakpoints>
   <MultiItemStartupConfigurations />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index 44c5909..8e73faa 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202012141" android:versionName="1.0.202012141" package="com.hdl.onplus">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202012141" android:versionName="1.0.202012141" package="com.hdl.onpro">
 	<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="26" />
 	<!--  瀹氫綅鏉冮檺-->
 	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/HDL_ON/DAL/DriverLayer/Control_Udp.cs b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
index 478de5c..e4e770b 100644
--- a/HDL_ON/DAL/DriverLayer/Control_Udp.cs
+++ b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -196,7 +196,7 @@
                                 case FunctionAttributeKey.FanSpeed:
                                     tempAc.trait_fan.curValue = attr.value;
                                     break;
-                                case FunctionAttributeKey.Temp:
+                                case FunctionAttributeKey.SetTemp:
                                     tempAc.trait_temp.curValue = attr.value;
                                     switch (tempAc.curModeIndex)
                                     {
@@ -261,7 +261,7 @@
                                 case FunctionAttributeKey.OnOff:
                                     tempFh.trait_on_off.curValue = attr.value;
                                     break;
-                                case FunctionAttributeKey.Temp:
+                                case FunctionAttributeKey.SetTemp:
                                     tempFh.trait_temp.curValue = attr.value;
                                     break;
                                 case FunctionAttributeKey.Mode:
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index a3de321..71bfe0f 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -585,8 +585,12 @@
                                 DB_ResidenceData.Instance.HomeGateway = mHomeGatewayRes[0];
                                 if(mHomeGatewayRes[0].gatewayStatus == "ON_LINE")
                                 {
-                                    DriverLayer.Control.Ins.IsRemote = true;
+                                    //DriverLayer.Control.Ins.IsRemote = true;
                                     DriverLayer.Control.Ins.GatewayOnline = true;
+                                }
+                                else
+                                {
+                                    DriverLayer.Control.Ins.GatewayOnline = false;
                                 }
                                 DB_ResidenceData.Instance.SaveResidenceData();
                                 return;
@@ -1913,7 +1917,7 @@
             d.Add("userSceneIds",new List<string>() { seceneId });
 
             var requestJson = HttpUtil.GetSignRequestJson(d);
-            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetSecneList, requestJson);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetSecneInfo, requestJson);
         }
         /// <summary>
         /// 娣诲姞鍦烘櫙
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index 1478f42..04ffcb9 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -157,7 +157,10 @@
                 }
             }
         }
-
+        /// <summary>
+        /// 璁板綍绐楀笜鍏ㄥ紑鍏ㄥ叧鐘舵��
+        /// </summary>
+        public bool GlobalCurtainStatus = false;
         /// <summary>
         /// 妫�娴嬩綇瀹呮槸鍚︾粦瀹氫簡缃戝叧
         /// gatewayId 鍒ょ┖
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 578e86f..0fb021f 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -469,270 +469,6 @@
         /// </summary>
         public object curValue = new object();
 
-        //----app鑷畾涔�
-        /// <summary>
-        /// 灞炴�у�煎崟浣�
-        /// </summary>
-        string _uintString;
-        [Newtonsoft.Json.JsonIgnore]
-        public string uintString
-        {
-            get
-            {
-                if (!string.IsNullOrEmpty(_uintString))
-                {
-                    return _uintString;
-                }
-                var us = "";
-                switch (key)
-                {
-                    case "temperature":
-                    case "set_temp":
-                        us = "掳C";
-                        break;
-                    case "percent":
-                    case "brightness":
-                        us = "%";
-                        break;
-                }
-                return us;
-            }
-        }
-
-        /// <summary>
-        /// 灞炴�у悕绉版樉绀烘枃鏈�
-        /// 涓嫳鏂囨樉绀�
-        /// </summary>
-        [Newtonsoft.Json.JsonIgnore]
-        public string name_text
-        {
-            get
-            {
-                string text = "";
-                switch (key)
-                {
-                    case "on_off":
-                        text = Language.StringByID(StringId.OnOff);
-                        break;
-                    case "brightness":
-                        text = Language.StringByID(StringId.Brightness);
-                        break;
-                    case "color":
-                        text = Language.StringByID(StringId.ColorValue);
-                        break;
-                    case "mode":
-                        text = Language.StringByID(StringId.Mode);
-                        break;
-                    case "fan":
-                        text = Language.StringByID(StringId.FanSpeed);
-                        break;
-                    case "temperature":
-                case "set_temp":
-                        text = Language.StringByID(StringId.Temp);
-                        break;
-                    case "delay":
-                        text = Language.StringByID(StringId.Delay);
-                        break;
-                    case "cct":
-                        text = "CCT";
-                        break;
-                    //case "fade_time":
-                    case "percent":
-                        text = Language.StringByID(StringId.PercentAdjustment);
-                        break;
-                        //case "lock":
-                        //case "ico":
-                        //case "swing":
-                        //case "set_point":
-                        //case "pm25":
-                        //case "volume":
-                        //case "vol_step":
-                        //case "source":
-                        //case "treble":
-                        //case "bass":
-                        //case "playlist":
-                        //case "song_name":
-                        //case "current_status":
-                        //case "enable":
-                        //case "lux":
-                        //case "adjust_value":
-                        //case "range":
-                        //case "humidity":
-                        //case "type":
-                        //case "state":
-                        //case "sensitivity":
-                        //case "pm25value":
-                }
-                return text;
-            }
-        }
-
-        /// <summary>
-        /// 鑾峰彇褰撳墠灞炴�х殑鏄剧ず鏂囨湰
-        /// 涓嫳鏂囨樉绀�
-        /// </summary>
-        public string GetCurValueText()
-        {
-            return GetValueText(curValue.ToString());
-        }
-
-        /// <summary>
-        /// 鑾峰彇鎸囧畾灞炴�х殑鏄剧ず鏂囨湰
-        /// 涓嫳鏂囨樉绀�
-        /// </summary>
-        public string GetValueText(string value)
-        {
-            string text = "";
-            value = value.Replace("{}", "");
-            switch (key)
-            {
-                case "on_off":
-                    text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF);
-                    break;
-                case "temperature":
-                case "set_temp":
-                case "brightness":
-                case "percent":
-                    if (value == "")
-                    {
-                        this.curValue = this.min;
-                        text = this.min.ToString();
-                    }
-                    else
-                    {
-                        text = value;
-                    }
-                    break;
-                //case "color":
-                case "mode":
-                    switch (value)
-                    {
-                        //----绌鸿皟
-                        case "auto":
-                            text = Language.StringByID(StringId.Auto);
-                            break;
-                        case "cool":
-                            text = Language.StringByID(StringId.Cool);
-                            break;
-                        case "heat":
-                            text = Language.StringByID(StringId.Heat);
-                            break;
-                        case "dry":
-                            text = Language.StringByID(StringId.Dry);
-                            break;
-                        case "fan":
-                            text = Language.StringByID(StringId.AirSupply);
-                            break;
-                        //-----鍦扮儹
-                        case "day":
-                            text = Language.StringByID(StringId.Day);
-                            break;
-                        case "night":
-                            text = Language.StringByID(StringId.Night);
-                            break;
-                        case "away":
-                            text = Language.StringByID(StringId.Away);
-                            break;
-                        case "normal":
-                            text = Language.StringByID(StringId.Normal);
-                            break;
-                        case "timer":
-                            text = Language.StringByID(StringId.Timer);
-                            break;
-                        default:
-                            if (this.value.Contains("cool"))
-                            {
-                                this.curValue = "cool";
-                                text = Language.StringByID(StringId.Cool);
-                            }
-                            else if (this.value.Contains("day"))
-                            {
-                                this.curValue = "day";
-                                text = Language.StringByID(StringId.Day);
-                            }
-                            else
-                            {
-                                foreach (var v in this.value)
-                                {
-                                    this.curValue = v;
-                                    text = GetCurValueText();
-                                }
-                            }
-                            break;
-                    }
-                    break;
-                case "fan":
-                    switch (value)
-                    {
-                        case "high":
-                            text = Language.StringByID(StringId.HighWindSpeed);
-                            break;
-                        case "medium":
-                            text = Language.StringByID(StringId.MiddleWindSpeed);
-                            break;
-                        case "low":
-                            text = Language.StringByID(StringId.LowWindSpeed);
-                            break;
-                        case "auto":
-                            text = Language.StringByID(StringId.Auto);
-                            break;
-                        default:
-                            if (this.value.Contains("low"))
-                            {
-                                this.curValue = "low";
-                                text = Language.StringByID(StringId.LowWindSpeed);
-                            }
-                            else
-                            {
-                                foreach (var v in this.value)
-                                {
-                                    this.curValue = v;
-                                    text = GetCurValueText();
-                                }
-                            }
-                            break;
-                    }
-                    break;
-                //case "delay":
-                //case "cct":
-                //case "fade_time":
-                //case "lock":
-                //case "ico":
-                //case "swing":
-                //case "set_point":
-                //case "pm25":
-                //case "volume":
-                //case "vol_step":
-                //case "source":
-                //case "treble":
-                //case "bass":
-                //case "playlist":
-                //case "song_name":
-                //case "current_status":
-                //case "enable":
-                //case "lux":
-                //case "adjust_value":
-                //case "range":
-                //case "humidity":
-                //case "type":
-                //case "state":
-                //case "sensitivity":
-                //case "pm25value":
-                case "high":
-                    text = Language.StringByID(StringId.HighWindSpeed);
-                    break;
-                case "medium":
-                    text = Language.StringByID(StringId.MiddleWindSpeed);
-                    break;
-                case "low":
-                    text = Language.StringByID(StringId.LowWindSpeed);
-                    break;
-                case "auto":
-                    text = Language.StringByID(StringId.Auto);
-                    break;
-            }
-            return text;
-        }
     }
     /// <summary>
     /// 鍔熻兘灞炴�ч敭鍚嶅垪琛�
@@ -760,9 +496,9 @@
         /// </summary>
         public const string FanSpeed = "fan";
         /// <summary>
-        /// 娓╁害
+        /// 璁剧疆娓╁害
         /// </summary>
-        public const string Temp = "temperature";
+        public const string SetTemp = "set_temp";
         /// <summary>
         /// 寤舵椂
         /// </summary>
diff --git a/HDL_ON/Entity/Function/Scene.cs b/HDL_ON/Entity/Function/Scene.cs
index 3983d39..b1ace2a 100644
--- a/HDL_ON/Entity/Function/Scene.cs
+++ b/HDL_ON/Entity/Function/Scene.cs
@@ -256,10 +256,31 @@
                 MainPage.Log($"Save Scene Data : {savePath}");
             }
         }
+
+        /// <summary>
+        /// 淇敼鍦烘櫙
+        /// </summary>
+        public string UpdateScene()
+        {
+            var pm = new HttpServerRequest();
+            var revPack = pm.EditScene(this);
+            if (revPack.Code == StateCode.SUCCESS)
+            {
+                var scenes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(revPack.Data.ToString());
+                var tempScene = scenes.Find((obj) => obj.sid == sid);
+                if (tempScene != null)
+                {
+                    var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
+                    Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
+                }
+            }
+            return revPack.Code;
+        }
+
         /// <summary>
         /// 娣诲姞鍦烘櫙
         /// </summary>
-        public void AddScene()
+        public string AddScene()
         {
             var pm = new HttpServerRequest();
             var revPack = pm.AddScene(this);
@@ -268,6 +289,7 @@
                 var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
                 Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd);
             }
+            return revPack.Code;
         }
 
         /// <summary>
@@ -329,10 +351,11 @@
         /// 鏈湴瀵瑰簲鐨勫姛鑳�
         /// </summary>
         [Newtonsoft.Json.JsonIgnore]
-        public Function localFunction {
+        public Function localFunction
+        {
             get
             {
-                if(_localFunction == null)
+                if (_localFunction == null)
                 {
                     _localFunction = ConvertFunctionObject();
                 }
@@ -347,13 +370,9 @@
         Function ConvertFunctionObject()
         {
             var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid);
-            foreach (var s in status)
-            {
-                localFunction.attributes.Add(new FunctionAttributes() { key = s.key, curValue = s.value, value = new List<string>() { s.value } });
-            }
             return localFunction;
         }
-      
+
     }
 
     /// <summary>
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index 8a38fa0..0cbae44 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -4,6 +4,7 @@
 using System.Threading;
 using HDL_ON.DAL;
 using HDL_ON.DAL.Server;
+using Shared;
 
 namespace HDL_ON.Entity
 {
@@ -437,15 +438,7 @@
                     var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
                     if (sceneList != null)
                     {
-                        ////灏嗕笅杞藉埌鍒版暟鎹叏閮ㄤ繚瀛�
-                        //new Thread(() => {
-                        //    foreach (var temp in sceneList)
-                        //    {
-                        //        temp.SaveSceneData();
-                        //    }
-                        //})
-                        //{ IsBackground = true }.Start();
-                        for(int i=0;i<List.scenes.Count;)
+                        for (int i=0;i<List.scenes.Count;)
                         {
                             var localScene = List.scenes[i];
                             if (localScene == null)
@@ -626,6 +619,166 @@
             { IsBackground = true }.Start();
         }
 
+
+        #region 鍔熻兘鏂囨湰鐩稿叧
+        /// <summary>
+        /// 灞炴�у悕绉版樉绀烘枃鏈�
+        /// 涓嫳鏂囨樉绀�
+        /// </summary>
+        public string GetNameText(string key)
+        {
+            string text = "";
+            switch (key)
+            {
+                case FunctionAttributeKey.OnOff:
+                    text = Language.StringByID(StringId.OnOff);
+                    break;
+                case FunctionAttributeKey.Brightness:
+                    text = Language.StringByID(StringId.Brightness);
+                    break;
+                case FunctionAttributeKey.Color:
+                    text = Language.StringByID(StringId.ColorValue);
+                    break;
+                case FunctionAttributeKey.Mode:
+                    text = Language.StringByID(StringId.Mode);
+                    break;
+                case FunctionAttributeKey.FanSpeed:
+                    text = Language.StringByID(StringId.FanSpeed);
+                    break;
+                case FunctionAttributeKey.SetTemp:
+                    text = Language.StringByID(StringId.Temp);
+                    break;
+                case FunctionAttributeKey.IndoorTemp:
+                    text = Language.StringByID(StringId.IndoorTemp);
+                    break;
+                case FunctionAttributeKey.Delay:
+                    text = Language.StringByID(StringId.Delay);
+                    break;
+                case FunctionAttributeKey.CCT:
+                    text = "CCT";
+                    break;
+                case FunctionAttributeKey.Percent:
+                    text = Language.StringByID(StringId.PercentAdjustment);
+                    break;
+            }
+            return text;
+        }
+
+        /// <summary>
+        /// 灞炴�у�煎崟浣�
+        /// </summary>
+        public string GetUintString(string key)
+        {
+            var us = "";
+            switch (key)
+            {
+                case FunctionAttributeKey.SetTemp:
+                case FunctionAttributeKey.IndoorTemp:
+                    us = "掳C";
+                    break;
+                case FunctionAttributeKey.Percent:
+                case FunctionAttributeKey.Brightness:
+                    us = "%";
+                    break;
+            }
+            return us;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸囧畾灞炴�х殑鏄剧ず鏂囨湰
+        /// 涓嫳鏂囨樉绀�
+        /// </summary>
+        public string GetValueText(string key, string value)
+        {
+            string text = "";
+            switch (key)
+            {
+                case FunctionAttributeKey.OnOff:
+                    text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF);
+                    break;
+                case FunctionAttributeKey.SetTemp:
+                case FunctionAttributeKey.IndoorTemp:
+                case FunctionAttributeKey.Brightness:
+                case FunctionAttributeKey.Percent:
+                    if (value == "")
+                    {
+                        value = "0";
+                    }
+                    text = value;
+                    break;
+                case FunctionAttributeKey.Mode:
+                    switch (value)
+                    {
+                        //----绌鸿皟
+                        case "auto":
+                            text = Language.StringByID(StringId.Auto);
+                            break;
+                        case "cool":
+                            text = Language.StringByID(StringId.Cool);
+                            break;
+                        case "heat":
+                            text = Language.StringByID(StringId.Heat);
+                            break;
+                        case "dry":
+                            text = Language.StringByID(StringId.Dry);
+                            break;
+                        case "fan":
+                            text = Language.StringByID(StringId.AirSupply);
+                            break;
+                        //-----鍦扮儹
+                        case "day":
+                            text = Language.StringByID(StringId.Day);
+                            break;
+                        case "night":
+                            text = Language.StringByID(StringId.Night);
+                            break;
+                        case "away":
+                            text = Language.StringByID(StringId.Away);
+                            break;
+                        case "normal":
+                            text = Language.StringByID(StringId.Normal);
+                            break;
+                        case "timer":
+                            text = Language.StringByID(StringId.Timer);
+                            break;
+                    }
+                    break;
+                case FunctionAttributeKey.FanSpeed:
+                    switch (value)
+                    {
+                        case "high":
+                            text = Language.StringByID(StringId.HighWindSpeed);
+                            break;
+                        case "medium":
+                            text = Language.StringByID(StringId.MiddleWindSpeed);
+                            break;
+                        case "low":
+                            text = Language.StringByID(StringId.LowWindSpeed);
+                            break;
+                        case "auto":
+                            text = Language.StringByID(StringId.Auto);
+                            break;
+                        default:
+                            text = "low";
+                            break;
+                    }
+                    break;
+                case "high":
+                    text = Language.StringByID(StringId.HighWindSpeed);
+                    break;
+                case "medium":
+                    text = Language.StringByID(StringId.MiddleWindSpeed);
+                    break;
+                case "low":
+                    text = Language.StringByID(StringId.LowWindSpeed);
+                    break;
+                case "auto":
+                    text = Language.StringByID(StringId.Auto);
+                    break;
+            }
+            return text;
+        }
+        #endregion
     }
 
 }
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index d29fe3f..1e9ab60 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -615,7 +615,7 @@
                             UnSelectedImagePath = "FunctionIcon/Curtain/CurtainCloseIcon.png",
                             SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseOnIcon.png",
                             //Tag = item + "_AllControl",
-                            IsSelected = false
+                            IsSelected = !DB_ResidenceData.Instance.GlobalCurtainStatus,
                         };
                         functionView.AddChidren(btnClose);
 
@@ -628,7 +628,7 @@
                             Height = Application.GetRealWidth(32),
                             UnSelectedImagePath = "FunctionIcon/Curtain/CurtainOpenIcon.png",
                             SelectedImagePath = "FunctionIcon/Curtain/CurtainOpenOnIcon.png",
-                            IsSelected = true,
+                            IsSelected = DB_ResidenceData.Instance.GlobalCurtainStatus,
                         };
                         functionView.AddChidren(btnOpen);
                         LoadEvent_CurtainSwitch(btnClose, btnOpen);
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPageBLL.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPageBLL.cs
index 73ab724..6b0a1c4 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPageBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPageBLL.cs
@@ -356,6 +356,9 @@
         {
             btnOpen.MouseUpEventHandler = (sender, e) =>
             {
+                DB_ResidenceData.Instance.GlobalCurtainStatus = true;
+                btnOpen.IsSelected = true;
+                btnClose.IsSelected = false;
                 foreach (var f in FunctionList.List.curtains)
                 {
                     f.trait_on_off.curValue = "on";
@@ -368,6 +371,9 @@
 
             btnClose.MouseUpEventHandler = (sender, e) =>
             {
+                DB_ResidenceData.Instance.GlobalCurtainStatus = false;
+                btnClose.IsSelected = true;
+                btnOpen.IsSelected = false;
                 foreach (var f in FunctionList.List.curtains)
                 {
                     f.trait_on_off.curValue =  "off";
diff --git a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
index 25511ec..4cc12db 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
@@ -374,7 +374,6 @@
                     Action refreshAction = () => {
                         btnName.Text = scene.name;
                         btnZone.Text = scene.GetRoomListName();
-                        //view.BackgroundImagePath = scene.ImagePath;
                         //2020-12-03 淇敼鍥剧墖鍔犺浇鏂规硶
                         ImageUtlis.Current.LoadLocalOrNetworkImages((scene as Scene).ImagePath, view);
                     };
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs
index 2da30d5..fb7bb19 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/NewSceneMenuListPage.cs
@@ -164,9 +164,9 @@
                     this.RemoveFromParent();
                     action();
                 };
-                var scene = new Entity.Scene() { roomIds = new System.Collections.Generic.List<string>() { "" } };
+                var scene = new Scene() { roomIds = new System.Collections.Generic.List<string>() { "" } };
                 scene.NewSid();
-                scene.name = Language.StringByID(StringId.Scene) + " " + (1 + Entity.FunctionList.List.scenes.Count).ToString();
+                scene.name = Language.StringByID(StringId.Scene) + " " + (1 + FunctionList.List.scenes.Count).ToString();
                 var aep = new SceneAddPage(scene,backAction);
                 MainPage.BasePageView.AddChidren(aep);
                 aep.LoadPage();
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
index 99b4656..8651933 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
@@ -90,23 +90,18 @@
             scene = s;
             backAction = act;
 
-
             refreshFunctionRowAction = () => {
                 LoadFunctionRow(functionListView);
             };
         }
 
-        public void LoadPage( Action backRefresh)
+        public void LoadPage()
         {
-            new TopViewDiv(bodyView, Language.StringByID(StringId.NewScene)).LoadTopView(backRefresh);
-            initPage();
-        }
-
-        void initPage()
-        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.NewScene)).LoadTopView();
+     
             bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
 
-            VerticalScrolViewLayout contentView = new VerticalScrolViewLayout()
+            var contentView = new VerticalScrolViewLayout()
             {
                 Y = Application.GetRealHeight(64),
                 Height = Application.GetRealHeight(603 - 50),
@@ -114,7 +109,7 @@
             bodyView.AddChidren(contentView);
             contentView.AddChidren(new Button() { Height = Application.GetRealWidth(12) });
 
-            FrameLayout sceneBgView = new FrameLayout()
+            var sceneBgView = new FrameLayout()
             {
                 Gravity = Gravity.CenterHorizontal,
                 Width = Application.GetRealWidth(252),
@@ -135,7 +130,6 @@
 
             //2020-12-03 淇敼鍥剧墖鍔犺浇鏂规硶
             ImageUtlis.Current.LoadLocalOrNetworkImages(scene.ImagePath, addSceneImageView);
-
 
             #region 鍦烘櫙鍚嶇Оrow
             sceneNameView = new FrameLayout()
@@ -401,8 +395,6 @@
                 };
                 row.AddChidren(btnRight);
 
-
-
                 var btnFunctionInfo = new Button()
                 {
                     Width = Application.GetRealWidth(327),
@@ -472,7 +464,6 @@
                     MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                 };
 
-
                 Button btnDelSceneFunction = new Button()
                 {
                     BackgroundColor = CSS_Color.WarningColor,
@@ -485,10 +476,7 @@
                     scene.SaveSceneData(true);
                     row.RemoveFromParent();
                     functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count);
-                    //LoadFunctionRow(functionListView);
                 };
-
-
             }
         }
 
@@ -506,66 +494,115 @@
                     if (sfs.value == "off")
                         return Language.StringByID(StringId.Close);
                 }
-                if (sfs.key == FunctionAttributeKey.Mode)
-                {
-
-                }
             }
-            FunctionAttributes perTrait;
 
-            switch (sceneFunction.localFunction.functionType)
+            if (sceneFunction.status.Count == 0)
             {
-                case FunctionType.AC:
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
-                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
-                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan").GetCurValueText();
-                    break;
-                case FunctionType.FloorHeating:
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
-                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
-                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
-                    break;
-                case FunctionType.Dimmer:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
-                case FunctionType.Relay:
-                    sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    break;
-                case FunctionType.RGB:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
-                case FunctionType.Curtain:
-                    sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    break;
-                case FunctionType.MotorCurtain:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
+                return sceneFunctionInfo += Language.StringByID(StringId.Open);
             }
+
+            var modeState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode);
+            var tempState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp);
+            var fanState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
+            if (modeState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(modeState.key, modeState.value);
+            }
+            if (tempState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(tempState.key, tempState.value);
+                sceneFunctionInfo += FunctionList.List.GetUintString(tempState.key);
+            }
+            if (fanState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(fanState.key, fanState.value);
+            }
+            var briState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
+            if (briState != null)
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+            }
+            else
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open);
+            }
+            var perState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
+            if (perState != null)
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+            }
+            else
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open);
+            }
+
+            //FunctionAttributes perTrait;
+
+            //switch (sceneFunction.localFunction.functionType)
+            //{
+                //case FunctionType.AC:
+                    //var acMode = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode);
+                    //var acTemp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp);
+                    //var acFan = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
+                    //if (acMode != null)
+                    //{
+                    //    sceneFunctionInfo += FunctionList.List.GetValueText(acMode.key, acMode.value);
+                    //}
+                    //if (acTemp != null)
+                    //{
+                    //    sceneFunctionInfo += FunctionList.List.GetValueText(acTemp.key, acTemp.value);
+                    //    sceneFunctionInfo += FunctionList.List.GetUintString(acTemp.key);
+                    //}
+                    //if (acFan!=null)
+                    //{
+                    //    sceneFunctionInfo += FunctionList.List.GetValueText(acFan.key, acFan.value);
+                    //}
+                //    break;
+                //case FunctionType.FloorHeating:
+                    //sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
+                    //sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
+                    //     sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
+                    //break;
+                //case FunctionType.Dimmer:
+                    //perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness");
+                    //if (perTrait != null)
+                    //{
+                    //    sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+                    //}
+                    //else
+                    //{
+                    //    sceneFunctionInfo += Language.StringByID(StringId.Open);
+                    //}
+                    //break;
+                //case FunctionType.Relay:
+                //    sceneFunctionInfo += Language.StringByID(StringId.Open);
+                //    break;
+                //case FunctionType.RGB:
+                //    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
+                //    if (perTrait != null)
+                //    {
+                //        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+                //    }
+                //    else
+                //    {
+                //        sceneFunctionInfo += Language.StringByID(StringId.Open);
+                //    }
+                //    break;
+                //case FunctionType.Curtain:
+                //    sceneFunctionInfo += Language.StringByID(StringId.Open);
+                //    break;
+                //case FunctionType.MotorCurtain:
+                //    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
+                //    if (perTrait != null)
+                //    {
+                //        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
+                //    }
+                //    else
+                //    {
+                //        sceneFunctionInfo += Language.StringByID(StringId.Open);
+                //    }
+                //    break;
+            //}
             return sceneFunctionInfo;
         }
 
@@ -843,41 +880,35 @@
         {
             btnComplete.MouseUpEventHandler += (sender, e) =>
             {
-                if (btnComplete.TextID == StringId.Complete)
+                if (string.IsNullOrEmpty(scene.name))
                 {
-                    if (string.IsNullOrEmpty(scene.name))
+                    new Tip()
                     {
-                        new Tip()
-                        {
-                            CloseTime = 1,
-                            Text = Language.StringByID(StringId.SceneNameCannotBeEmpty),
-                            Direction = AMPopTipDirection.None,
-                        }.Show(bodyView);
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.SceneNameCannotBeEmpty),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(bodyView);
+                    return;
+                }
+                foreach (var tempRoom in FunctionList.List.scenes)
+                {
+                    if (scene.name == tempRoom.name)
+                    {
+                        new PublicAssmebly().TipMsg(StringId.Tip, StringId.SceneNameAlreadyExists);
                         return;
                     }
-                    foreach (var tempRoom in FunctionList.List.scenes)
-                    {
-                        if (scene.name == tempRoom.name)
-                        {
-                            new PublicAssmebly().TipMsg(StringId.Tip, StringId.SceneNameAlreadyExists);
-                            return;
-                        }
-                    }
-                    scene.SaveSceneData(true);
+                }
+                var result = scene.AddScene();
+                if (result == StateCode.SUCCESS)
+                {
                     FunctionList.List.scenes.Add(scene);
                     backAction();
                     this.RemoveFromParent();
                 }
-                if (btnComplete.TextID == StringId.Del)
+                else
                 {
-                    Action action = () =>
-                    {
-                        FunctionList.List.DeleteScene(scene, true);
-                        backAction();
-                        this.RemoveFromParent();
-                    };
-                    new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.DeleteSceneTip, action);
-                };
+                    IMessageCommon.Current.ShowErrorInfoAlter(result);
+                }
             };
         }
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
index cb146e7..049a185 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -374,6 +374,37 @@
             bodyView.AddChidren(btnComplete);
 
             LoadEventList();
+
+            var waitPage = new Loading();
+            new Thread(() => {
+                Application.RunOnMainThread(() => {
+                    bodyView.AddChidren(waitPage);
+                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
+                });
+                var pm = new HttpServerRequest();
+                var pack = pm.GetSceneInfo(scene.userSceneId);
+                if (pack.Code == StateCode.SUCCESS)
+                {
+                    var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
+                    var tempScene = sceneList.Find((obj) => obj.userSceneId == scene.userSceneId);
+                    if(tempScene!= null)
+                    {
+                        scene.functions = tempScene.functions;
+                    }
+                    Application.RunOnMainThread(() =>
+                    {
+                        waitPage.Hide();
+                    });
+                }
+                else
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        waitPage.Hide();
+                        IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
+                    });
+                }
+            }).Start();
         }
         /// <summary>
         /// 鍔犺浇鍔熻兘鍒楄〃
@@ -513,66 +544,94 @@
                     if (sfs.value == "off")
                         return Language.StringByID(StringId.Close);
                 }
-                if (sfs.key == FunctionAttributeKey.Mode)
-                {
-                    
-                }
             }
-            FunctionAttributes perTrait;
 
-            switch (sceneFunction.localFunction.functionType)
+            if (sceneFunction.status.Count == 0)
             {
-                case FunctionType.AC:
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
-                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
-                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan").GetCurValueText();
-                    break;
-                case FunctionType.FloorHeating:
-                    sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
-                    sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
-                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
-                    break;
-                case FunctionType.Dimmer:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
-                case FunctionType.Relay:
-                    sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    break;
-                case FunctionType.RGB:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
-                case FunctionType.Curtain:
-                    sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    break;
-                case FunctionType.MotorCurtain:
-                    perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
-                    if (perTrait != null)
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
-                    }
-                    else
-                    {
-                        sceneFunctionInfo += Language.StringByID(StringId.Open);
-                    }
-                    break;
+                return sceneFunctionInfo += Language.StringByID(StringId.Open);
             }
+
+            var modeState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode);
+            var tempState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp);
+            var fanState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
+            if (modeState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(modeState.key, modeState.value);
+            }
+            if (tempState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(tempState.key, tempState.value);
+                sceneFunctionInfo += FunctionList.List.GetUintString(tempState.key);
+            }
+            if (fanState != null)
+            {
+                sceneFunctionInfo += FunctionList.List.GetValueText(fanState.key, fanState.value);
+            }
+            var briState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
+            if (briState != null)
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + briState.value + "%";
+            }
+            var perState = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
+            if (perState != null)
+            {
+                sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + perState.value + "%";
+            }
+            //FunctionAttributes perTrait;
+
+            //switch (sceneFunction.localFunction.functionType)
+            //{
+            //    case FunctionType.AC:
+            //        sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
+            //        sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
+            //             sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
+            //        sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan").GetCurValueText();
+            //        break;
+            //    case FunctionType.FloorHeating:
+            //        sceneFunctionInfo += sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode").GetCurValueText();
+            //        sceneFunctionInfo += " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").curValue.ToString() +
+            //             sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp").uintString;
+            //        break;
+            //    case FunctionType.Dimmer:
+            //        perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness");
+            //        if (perTrait != null)
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+            //        }
+            //        else
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open);
+            //        }
+            //        break;
+            //    case FunctionType.Relay:
+            //        sceneFunctionInfo += Language.StringByID(StringId.Open);
+            //        break;
+            //    case FunctionType.RGB:
+            //        perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
+            //        if (perTrait != null)
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness").curValue.ToString() + "%";
+            //        }
+            //        else
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open);
+            //        }
+            //        break;
+            //    case FunctionType.Curtain:
+            //        sceneFunctionInfo += Language.StringByID(StringId.Open);
+            //        break;
+            //    case FunctionType.MotorCurtain:
+            //        perTrait = sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent");
+            //        if (perTrait != null)
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open) + " " + sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent").curValue.ToString() + "%";
+            //        }
+            //        else
+            //        {
+            //            sceneFunctionInfo += Language.StringByID(StringId.Open);
+            //        }
+            //        break;
+            //}
             return sceneFunctionInfo;
         }
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
index d562d05..e1695e9 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
@@ -10,21 +10,19 @@
     {
         FrameLayout bodyView;
         VerticalScrolViewLayout contentView;
+        Button btnOnText;
 
         Scene scene;
 
         Action refreshAction;
         SceneFunction sceneFunction;
-        //Function localFunction;
         public SceneFunctionInfoEditPage(Scene s, SceneFunction fc,Action action)
         {
             bodyView = this;
             scene = s;
-            //localFunction = fc;
             sceneFunction = fc;
             refreshAction = action;
         }
-
 
         public void LoadPage()
         {
@@ -40,35 +38,58 @@
             };
             bodyView.AddChidren(contentView);
 
-            //鍔犺浇寮�鍏砇ow
-            LoadFunctionRow(sceneFunction.localFunction.trait_on_off);
+            LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff));
 
-            switch (sceneFunction.localFunction.functionType)
+            foreach (var attr in sceneFunction.status)
             {
-                case FunctionType.AC:
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp"));
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode"));
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan"));
-                    break;
-                case FunctionType.FloorHeating:
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp"));
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode"));
-                    break;
-                case FunctionType.Curtain:
-                    //鏃犳搷浣�
-                    break;
-                case FunctionType.MotorCurtain:
-                case FunctionType.RollingShutter:
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent"));
-                    break;
-                case FunctionType.Relay:
-                    //鏃犳搷浣�
-                    break;
-                case FunctionType.Dimmer:
-                case FunctionType.RGB:
-                    LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness"));
-                    break;
+                switch (attr.key)
+                {
+                    case FunctionAttributeKey.SetTemp:
+                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.SetTemp));
+                        break;
+                    case FunctionAttributeKey.Mode:
+                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Mode));
+                        break;
+                    case FunctionAttributeKey.FanSpeed:
+                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed));
+                        break;
+                    case FunctionAttributeKey.Percent:
+                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent));
+                        break;
+                    case FunctionAttributeKey.Brightness:
+                        LoadFunctionRow(sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness));
+                        break;
+                }
             }
+
+            //鍔犺浇寮�鍏砇ow
+            //LoadFunctionRow(sceneFunction.localFunction.trait_on_off);
+            //switch (sceneFunction.localFunction.functionType)
+            //{
+            //    case FunctionType.AC:
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp"));
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode"));
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "fan"));
+            //        break;
+            //    case FunctionType.FloorHeating:
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temp"));
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "mode"));
+            //        break;
+            //    case FunctionType.Curtain:
+            //        //鏃犳搷浣�
+            //        break;
+            //    case FunctionType.MotorCurtain:
+            //    case FunctionType.RollingShutter:
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "percent"));
+            //        break;
+            //    case FunctionType.Relay:
+            //        //鏃犳搷浣�
+            //        break;
+            //    case FunctionType.Dimmer:
+            //    case FunctionType.RGB:
+            //        LoadFunctionRow(sceneFunction.localFunction.attributes.Find((obj) => obj.key == "brightness"));
+            //        break;
+            //}
 
             //鍔犺浇寤舵椂Row
             LoadDelayRow();
@@ -100,7 +121,6 @@
 
             btnConfrim.MouseUpEventHandler = (sender, e) =>
             {
-                //var temp = localFunction.ConvertSceneFunction();
                 var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid);
                 if (temp != null)
                 {
@@ -110,9 +130,19 @@
                 {
                     scene.functions.Add(sceneFunction);
                 }
-                scene.SaveSceneData(true);
-                refreshAction();
-                this.RemoveFromParent();
+                if (!string.IsNullOrEmpty(scene.userSceneId))
+                {
+                    var result = scene.UpdateScene();
+                    if (result == DAL.Server.StateCode.SUCCESS)
+                    {
+                        refreshAction();
+                        this.RemoveFromParent();
+                    }
+                    else
+                    {
+                        DAL.Server.IMessageCommon.Current.ShowErrorInfoAlter(result);
+                    }
+                }
             };
         }
 
@@ -120,9 +150,9 @@
         /// <summary>
         /// 鍔犺浇鍔熻兘Row
         /// </summary>
-        void LoadFunctionRow(FunctionAttributes trait)
+        void LoadFunctionRow(SceneFunctionStatus sceneStatus)
         {
-            if (trait == null)
+            if (sceneStatus == null)
                 return;
             #region Row code
             var row = new FrameLayout()
@@ -131,7 +161,7 @@
                 BackgroundColor = CSS_Color.MainBackgroundColor,
             };
             contentView.AddChidren(row);
-            if (trait.key != "on_off")
+            if (sceneStatus.key != FunctionAttributeKey.OnOff)
             {
                 row.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
             }
@@ -151,9 +181,11 @@
                 TextAlignment = TextAlignment.CenterRight,
                 TextColor = CSS_Color.PromptingColor1,
                 TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                Text = trait.GetCurValueText() + trait.uintString
+                Text = FunctionList.List.GetValueText(sceneStatus.key,sceneStatus.value) + FunctionList.List.GetUintString(sceneStatus.key)
             };
             row.AddChidren(btnFunctionText);
+            if (sceneStatus.key == FunctionAttributeKey.OnOff)
+                btnOnText = btnFunctionText;
 
             var btnFunctionName = new Button()
             {
@@ -161,62 +193,48 @@
                 TextAlignment = TextAlignment.CenterLeft,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
-                Text = trait.name_text
+                Text = FunctionList.List.GetNameText(sceneStatus.key)
             };
             row.AddChidren(btnFunctionName);
             btnFunctionName.MouseUpEventHandler = (sender, e) =>
             {
-                switch (trait.key)
+                switch (sceneStatus.key)
                 {
-                    case "on_off":
-                        LoadEditDialog_OnOff(trait, btnFunctionText);
+                    case FunctionAttributeKey.OnOff:
+                        LoadEditDialog_OnOff(sceneStatus, btnFunctionText);
                         break;
-                    case "brightness":
-                        LoadEditDialog_Percent(trait, btnFunctionText);
+                    case FunctionAttributeKey.Brightness:
+                        LoadEditDialog_Percent(sceneStatus, btnFunctionText);
                         break;
-                    //case "color":
-                    //    break;
-                    case "mode":
-                        LoadEditDialog_FunctionPar(trait, btnFunctionText);
+                    case FunctionAttributeKey.Mode:
+                        var statusList = new List<string>();
+                        var tr = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Mode);
+                        foreach(var t in tr.value)
+                        {
+                            statusList.Add(t);
+                        }
+                        LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText,statusList);
                         break;
-                    case "fan":
-                        LoadEditDialog_FunctionPar(trait, btnFunctionText);
+                    case FunctionAttributeKey.FanSpeed:
+                        var fanStatusList = new List<string>();
+                        var tr1 = sceneFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
+                        foreach (var t in tr1.value)
+                        {
+                            fanStatusList.Add(t);
+                        }
+                        LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, fanStatusList);
                         break;
-                    case "set_temp":
-                        LoadEditDialog_Temp(trait, btnFunctionText);
+                    case FunctionAttributeKey.SetTemp:
+                        LoadEditDialog_Temp(sceneStatus, btnFunctionText);
                         break;
                     case "delay":
                         break;
                     case "cct":
                         break;
-                    //case "fade_time":
-                    case "percent":
-                        LoadEditDialog_Percent(trait, btnFunctionText);
+                    case FunctionAttributeKey.Percent:
+                        LoadEditDialog_Percent(sceneStatus, btnFunctionText);
                         break;
-                        //case "lock":
-                        //case "ico":
-                        //case "swing":
-                        //case "set_ point":
-                        //case "pm25":
-                        //case "volume":
-                        //case "vol_step":
-                        //case "source":
-                        //case "treble":
-                        //case "bass":
-                        //case "playlist":
-                        //case "song_name":
-                        //case "current_status":
-                        //case "enable":
-                        //case "lux":
-                        //case "adjust_value":
-                        //case "range":
-                        //case "humidity":
-                        //case "type":
-                        //case "state":
-                        //case "sensitivity":
-                        //case "pm25value":
                 }
-                //LoadEditDialog_Temp(trait, btnFunctionText);
             };
 
             #endregion
@@ -286,7 +304,7 @@
         /// </summary>
         /// <param name="function"></param>
         /// <param name="btn"></param>
-        void LoadEditDialog_OnOff(FunctionAttributes trait, Button btn)
+        void LoadEditDialog_OnOff(SceneFunctionStatus trait, Button btn)
         {
             Dialog dialog = new Dialog();
 
@@ -324,7 +342,7 @@
                 SelectedTextColor = CSS_Color.MainColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
                 TextID = StringId.On,
-                IsSelected = trait.curValue.ToString() == "on"
+                IsSelected = trait.value.ToString() == "on"
             };
             optionView.AddChidren(btnOn);
 
@@ -338,7 +356,7 @@
                 SelectedTextColor = CSS_Color.MainColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
                 TextID = StringId.OFF,
-                IsSelected = trait.curValue.ToString() == "off"
+                IsSelected = trait.value.ToString() == "off"
             };
             optionView.AddChidren(btnOff);
 
@@ -367,15 +385,15 @@
             };
             btnOn.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
-                trait.curValue = "on";
+                trait.value = "on";
                 sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "on";
-                btn.Text = trait.GetCurValueText() + trait.uintString;
+                btn.Text = FunctionList.List.GetValueText(trait.key, trait.value) + FunctionList.List.GetUintString(trait.key);
             };
             btnOff.MouseUpEventHandler = (sender,e) =>{
                 dialog.Close();
-                trait.curValue = "off";
+                trait.value = "off";
                 sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "off";
-                btn.Text= trait.GetCurValueText() + trait.uintString;
+                btn.Text= FunctionList.List.GetValueText(trait.key,trait.value) + FunctionList.List.GetUintString(trait.key);
             };
 
         }
@@ -385,7 +403,7 @@
         /// </summary>
         /// <param name="function"></param>
         /// <param name="btn"></param>
-        void LoadEditDialog_Temp(FunctionAttributes trait, Button btn)
+        void LoadEditDialog_Temp(SceneFunctionStatus trait, Button btn)
         {
             List<string> pickerItems = new List<string>();
             if(trait == null)
@@ -452,33 +470,14 @@
                 Height = Application.GetRealHeight(210),
                 Radius = (uint)Application.GetRealWidth(12),
             };
-            if(trait!=null)
+            for (int i = 16; i <= 32; i += 1)
             {
-                if (trait.data_type == "float")
-                {
-                    for (double i = trait.min; i <= trait.max; i += 0.5)
-                    {
-                        pickerItems.Add(i.ToString() + trait.uintString);
-                    }
-                }
-                else
-                {
-                    for (int i = trait.min; i <= trait.max; i += 1)
-                    {
-                        pickerItems.Add(i.ToString() + trait.uintString);
-                    }
-                }
-            }else
-            {
-                for (int i = 16; i <= 32; i += 1)
-                {
-                    pickerItems.Add(i.ToString() + trait.uintString);
-                }
+                pickerItems.Add(i.ToString() + FunctionList.List.GetUintString(trait.key));
             }
             uIPickerView.setNPicker(pickerItems, null, null);
             optionBaseView.AddChidren(uIPickerView);
-            uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.curValue.ToString()), 4, 5);
-            string selectItem = trait.curValue.ToString() + trait.uintString;
+            uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString()), 4, 5);
+            string selectItem = trait.value.ToString() + FunctionList.List.GetUintString(trait.key);
 
             dialog.Show();
 
@@ -495,19 +494,18 @@
             btnConfrim.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
                 btn.Text = selectItem;
-                sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
-                trait.curValue = selectItem.Replace(trait.uintString,"");
+                //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ;
+                trait.value = selectItem.Replace(FunctionList.List.GetUintString(trait.key),"");
             };
 
         }
-
 
         /// <summary>
         /// 鍔犺浇浜害閫夋嫨寮圭獥
         /// </summary>
         /// <param name="function"></param>
         /// <param name="btn"></param>
-        void LoadEditDialog_Percent(FunctionAttributes trait, Button btn)
+        void LoadEditDialog_Percent(SceneFunctionStatus trait, Button btn)
         {
             if (trait == null)
             {
@@ -546,13 +544,12 @@
             optionBaseView.AddChidren(topView);
             topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
 
-
             var btnTitle = new Button()
             {
                 Gravity = Gravity.CenterHorizontal,
                 TextAlignment = TextAlignment.Center,
                 Width = Application.GetRealWidth(100),
-                Text = trait.name_text,
+                Text = FunctionList.List.GetNameText(trait.key),
                 IsBold = true,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
@@ -580,8 +577,6 @@
             };
             topView.AddChidren(btnConfrim);
 
-
-
             Button btnMinusSignIcon = new Button()
             {
                 X = Application.GetRealWidth(26),
@@ -605,7 +600,7 @@
                 ProgressTextColor = CSS_Color.FirstLevelTitleColor,
                 ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                 MaxValue = 100,
-                Progress = trait.curValue.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32( trait.curValue),
+                Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32( trait.value.Replace("{}","")),
                 SeekBarPadding = Application.GetRealWidth(20),
             };
             optionBaseView.AddChidren(controlBar);
@@ -627,7 +622,6 @@
                 controlBar.Progress++;
             };
 
-
             dialog.Show();
             pView.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
@@ -638,9 +632,17 @@
             };
             btnConfrim.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
-                trait.curValue = controlBar.Progress;
-                sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
-                btn.Text = trait.curValue + trait.uintString;
+                trait.value = controlBar.Progress.ToString();
+                btn.Text = trait.value + FunctionList.List.GetUintString(trait.key);
+                if (controlBar.Progress > 0)
+                {
+                    var temp = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff);
+                    if (temp != null)
+                    {
+                        temp.value = "on";
+                        btnOnText.Text = FunctionList.List.GetValueText(temp.key, temp.value);
+                    }
+                }
             };
         }
 
@@ -649,7 +651,7 @@
         /// <summary>
         /// 鍔犺浇鍔熻兘灞炴�ф暟鎹�夋嫨寮圭獥
         /// </summary>
-        void LoadEditDialog_FunctionPar(FunctionAttributes trait, Button btn)
+        void LoadEditDialog_FunctionPar(SceneFunctionStatus trait, Button btn,List<string> statusList)
         {
             Button lastButton = new Button();
             var lastData = "";
@@ -664,10 +666,10 @@
 
             var optionBaseView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(579 - 50 * trait.value.Count),
+                Y = Application.GetRealHeight(579 - 50 * statusList.Count),
                 Gravity = Gravity.CenterHorizontal,
                 Width = Application.GetRealWidth(343),
-                Height = Application.GetRealHeight(50 * trait.value.Count + 50),
+                Height = Application.GetRealHeight(50 * statusList.Count + 50),
                 AnimateSpeed = 0.3f,
                 Animate = Animate.DownToUp,
                 BackgroundColor = CSS_Color.MainBackgroundColor,
@@ -690,7 +692,7 @@
                 Gravity = Gravity.CenterHorizontal,
                 TextAlignment = TextAlignment.Center,
                 Width = Application.GetRealWidth(100),
-                Text = trait.name_text,
+                Text = FunctionList.List.GetNameText(trait.key),
                 IsBold = true,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
@@ -718,7 +720,7 @@
             };
             topView.AddChidren(btnConfrim);
             int hei = 1;
-            foreach (var m in trait.value)
+            foreach (var m in statusList)
             {
                 var row = new FrameLayout()
                 {
@@ -726,7 +728,7 @@
                     Height = Application.GetRealHeight(50),
                 };
                 optionBaseView.AddChidren(row);
-                if (trait.value.Count > hei)
+                if (statusList.Count > hei)
                 {
                     optionBaseView.AddChidren(new Button()
                     {
@@ -750,7 +752,7 @@
 
                 };
                 row.AddChidren(btnChoose);
-                if (trait.curValue.ToString() == m)
+                if (trait.value == m)
                 {
                     lastButton = btnChoose;
                     btnChoose.IsSelected = true;
@@ -762,7 +764,7 @@
                     TextColor = CSS_Color.FirstLevelTitleColor,
                     TextSize = CSS_FontSize.TextFontSize,
                     Tag = m,
-                    Text = trait.GetValueText(m)
+                    Text = FunctionList.List.GetValueText(trait.key, m)
                 };
                 row.AddChidren(btnPropertyTitle);
 
@@ -792,8 +794,8 @@
             };
             btnConfrim.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
-                trait.curValue = lastData;
-                sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
+                trait.value = lastData;
+                //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
                 btn.Text = lastText;
             };
 

--
Gitblit v1.8.0