wei
2020-12-15 7467a843644aee00e5a4d91dd967cdb9e30f1985
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);
            //加载开关Row
            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;
                }
            }
            //加载开关Row
            //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;
            };