xm
2021-12-01 6d73bf6e816570291865674bef8bce8972e4de3f
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -76,7 +76,6 @@
        Scene scene;
        int pageTitleId;
        /// <summary>
        /// 更新功能row
        /// </summary>
@@ -93,21 +92,13 @@
            refreshFunctionRowAction = () => {
                LoadFunctionRow(functionListView);
                LoadFunctionRow();
            };
        }
        public void LoadPage(int titleId,Action backRefresh)
        public void LoadPage(Action backRefresh)
        {
            pageTitleId = titleId;
            new TopViewDiv(bodyView, Language.StringByID(pageTitleId)).LoadTopView(backRefresh);
            initPage();
        }
        public void LoadPage(int titleId)
        {
            pageTitleId = titleId;
            new TopViewDiv(bodyView, Language.StringByID(pageTitleId)).LoadTopView();
            new TopViewDiv(bodyView, Language.StringByID(StringId.EditScene)).LoadTopView(backRefresh);
            initPage();
        }
@@ -211,7 +202,7 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                TextID = StringId.BelongToZone,
                TextID = StringId.LocationManagement,
            };
            belongToZoneRow.AddChidren(btnBelongToTitle);
@@ -232,7 +223,7 @@
                TextAlignment = TextAlignment.CenterRight,
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.TextFontSize,
                Text = scene.GetRoomListName() == "" ? Language.StringByID(StringId.WholeHouseScene) : scene.GetRoomListName()
                Text = scene.GetRoomListName() == "" ? Language.StringByID(StringId.WholeZone) : scene.GetRoomListName()
            };
            belongToZoneRow.AddChidren(btnZoneName);
@@ -245,7 +236,7 @@
            #endregion
            #region 场景延时row
            if (DB_ResidenceData.residenceData.GatewayType == 1)
            if (DB_ResidenceData.Instance.GatewayType == 1)
            {
                FrameLayout sceneDelayRow = new FrameLayout()
                {
@@ -270,7 +261,7 @@
                    TextAlignment = TextAlignment.CenterRight,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = scene.delayText
                    Text = scene.GetDelayText()
                };
                sceneDelayRow.AddChidren(btnSceneDelayInfo);
@@ -288,7 +279,17 @@
                btnSceneDelayTitle.MouseUpEventHandler = (sender, e) =>
                {
                    new PublicAssmebly().SetSceneDelayDialog(scene, btnSceneDelayInfo);
                    Action<string> action = (obj) => {
                        scene.delay = obj;
                        btnSceneDelayInfo.Text = scene.GetDelayText();
                        scene.EditScene();
                    };
                    Dictionary<string, string> items = new Dictionary<string, string>();
                    items.Add("30", "30s");
                    items.Add("60", "1min");
                    items.Add("120", "2min");
                    items.Add("300", "5min");
                    new PublicAssmebly().SetSceneDelayDialog(action,scene.delay);
                };
                contentView.AddChidren(new Button()
@@ -323,17 +324,18 @@
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.AddFunction,
                TextID = StringId.FunctionManagement,
                IsBold = true,
            };
            addFunctionRow.AddChidren(btnAddFunctionTitle);
            functionListView = new VerticalScrolViewLayout() {
                Height = 0,
                ScrollEnabled  = false,
            };
            contentView.AddChidren(functionListView);
            LoadFunctionRow(functionListView);
            LoadFunctionRow();
            Button btnLine1 = new Button()
            {
@@ -365,25 +367,76 @@
                Y = Application.GetRealHeight(667 - 50),
                Height = Application.GetRealHeight(50),
                TextAlignment = TextAlignment.Center,
                TextColor = pageTitleId == StringId.NewScene ? CSS_Color.MainColor : CSS_Color.WarningColor,
                TextColor =  CSS_Color.WarningColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = pageTitleId == StringId.NewScene ? StringId.Complete : StringId.Del,
                TextID =   StringId.Del,
                BackgroundColor = CSS_Color.MainBackgroundColor,
                //IsBold = true
            };
            bodyView.AddChidren(btnComplete);
            if (scene.can_delete)
            {
                bodyView.AddChidren(btnComplete);
            }
            LoadEventList();
            var waitPage = new Loading();
            new Thread(() => {
                try
                {
                    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(() =>
                        {
                            LoadFunctionRow();
                            waitPage.Hide();
                            waitPage.RemoveFromParent();
                        });
                    }
                    else
                    {
                        IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
                    }
                }
                catch { }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        waitPage.Hide();
                        waitPage.RemoveFromParent();
                    });
                }
            }).Start();
        }
        /// <summary>
        /// 加载功能列表
        /// </summary>
        void LoadFunctionRow(VerticalScrolViewLayout functionListView)
        void LoadFunctionRow()
        {
            functionListView.RemoveAll();
            functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count);
            foreach (var scenefunction in scene.functions)
            for(int i =0;i<scene.functions.Count;)
            {
                var scenefunction = scene.functions[i];
                if (scenefunction.localFunction == null)
                {
                    scene.functions.Remove(scenefunction);
                    continue;
                }
                i++;
                var row = new RowLayout()
                {
                    Height = Application.GetRealWidth(65),
@@ -409,8 +462,6 @@
                };
                row.AddChidren(btnRight);
                var btnFunctionInfo = new Button()
                {
                    Width = Application.GetRealWidth(327),
@@ -418,7 +469,7 @@
                    TextAlignment = TextAlignment.BottomRight,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = GetFunctionScnenInfo(scenefunction),
                    Text = scenefunction.GetFunctionScnenInfo(),
                };
                row.AddChidren(btnFunctionInfo);
@@ -435,7 +486,7 @@
                if (Convert.ToInt32( scenefunction.delay) > 0)
                {
                    btnFunctionDelayInfo.Text = Language.StringByID(StringId.Delay) + " " + scenefunction.localFunction.delayText;
                    btnFunctionDelayInfo.Text = Language.StringByID(StringId.Delay) + " " + new Scene() { delay = scenefunction.delay }.GetDelayText();
                }
                else
                {
@@ -465,20 +516,15 @@
                };
                row.AddChidren(btnFunctionFloorAndRoom);
                btnFunctionName.MouseUpEventHandler = (sender, e) =>
                EventHandler<MouseEventArgs> skipEvent = (sender, e) =>
                {
                    var ssf = new SceneFunctionInfoEditPage(scene, scenefunction, refreshFunctionRowAction);
                    MainPage.BasePageView.AddChidren(ssf);
                    ssf.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnFunctionFloorAndRoom.MouseUpEventHandler = (sender, e) =>
                {
                    var ssf = new SceneFunctionInfoEditPage(scene, scenefunction, refreshFunctionRowAction);
                    MainPage.BasePageView.AddChidren(ssf);
                    ssf.LoadPage();
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                btnFunctionName.MouseUpEventHandler = skipEvent;
                btnFunctionFloorAndRoom.MouseUpEventHandler = skipEvent;
                Button btnDelSceneFunction = new Button() {
@@ -489,91 +535,11 @@
                row.AddRightView(btnDelSceneFunction);
                btnDelSceneFunction.MouseUpEventHandler = (sender, e) => {
                    scene.functions.Remove(scenefunction);
                    scene.SaveSceneData();
                    scene.EditScene();
                    row.RemoveFromParent();
                    functionListView.Height = Application.GetRealWidth(65 * scene.functions.Count);
                    //LoadFunctionRow(functionListView);
                };
            }
        }
        /// <summary>
        /// 解析场景功能数据
        /// </summary>
        /// <param name="sceneFunction"></param>
        string GetFunctionScnenInfo(SceneFunction sceneFunction)
        {
            var sceneFunctionInfo = "";
            foreach (var sfs in sceneFunction.status)
            {
                if (sfs.key == FunctionAttributeKey.OnOff)
                {
                    if (sfs.value == "off")
                        return Language.StringByID(StringId.Close);
                }
                if (sfs.key == FunctionAttributeKey.Mode)
                {
                }
            }
            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_temperature").curValue.ToString() +
                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").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_temperature").curValue.ToString() +
                         sceneFunction.localFunction.attributes.Find((obj) => obj.key == "set_temperature").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;
        }
        /// <summary>
@@ -685,7 +651,14 @@
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                Action backAction = () => {
                    btnZoneName.Text = scene.GetRoomListName();
                    var result = scene.EditScene();
                    if (result == StateCode.SUCCESS)
                    {
                        btnZoneName.Text = scene.GetRoomListName();
                    }else
                    {
                        IMessageCommon.Current.ShowErrorInfoAlter(result);
                    }
                };
                var ssl = new SetSceneLocationPage(scene, backAction);
                MainPage.BasePageView.AddChidren(ssl);
@@ -704,7 +677,7 @@
        void LoadEvent_ChangeFunctionList()
        {
            btnAddFunctionTitle.MouseUpEventHandler = (sender, e) => {
                var sefp =new SceneFunctionListEditPage(scene,refreshFunctionRowAction);
                var sefp =new SceneFunctionListChoosePage(scene,refreshFunctionRowAction);
                MainPage.BasePageView.AddChidren(sefp);
                sefp.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -746,30 +719,12 @@
            {
                btnTakePicture.IsSelected = false;
                //var pid = Guid.NewGuid();
                //CropImage.TakePicture((imagePath) =>
                //{
                //    if (imagePath != null)
                //    {
                //        addSceneImageView.ImagePath = imagePath.ToString();
                //        scene.ImagePath = addSceneImageView.ImagePath;
                //        MainPage.Log("SelectPicture 裁剪图片返回路径: " + imagePath);
                //    }
                //}, pid.ToString(), 4, 3);
                var imageName = Guid.NewGuid().ToString();
                //var imageName = scene.sid;
                CropImage.TakePicture((imagePath) =>
                {
                    CropImageCallBack(imagePath);
                }, imageName, 4, 3);
                //if (pageTitleId == StringId.EditScene)
                //{
                //    scene.SaveFunctionData();
                //}
                pictureOptionView.Parent.RemoveFromParent();
            };
            btnAlbum.MouseDownEventHandler = (sender, e) => {
@@ -799,10 +754,6 @@
                }, imageName, 4, 3);
                //if (pageTitleId == StringId.EditScene)
                //{
                //    scene.SaveFunctionData();
                //}
                pictureOptionView.Parent.RemoveFromParent();
            };
@@ -810,11 +761,9 @@
                pictureOptionView.Parent.RemoveFromParent();
                Action<string> action = (obj) => {
                    scene.ImagePath = obj;
                    addSceneImageView.ImageBytes = null;//解决有ImageBytes不加载ImagePath
                    addSceneImageView.ImagePath = scene.ImagePath;
                    if (pageTitleId == StringId.EditScene)
                    {
                        scene.SaveSceneData();
                    }
                    scene.EditScene();
                };
                var galleryPage = new GalleryPage(scene.ImagePath,action);
@@ -840,12 +789,9 @@
            //上传成功到回调
            Action<string> uploadSuccessAction = (imageUrl) =>
            {
                    //2020-12-03 需要讲最新的图片路径同步到云端
                    scene.ImagePath = imageUrl;
                if (pageTitleId == StringId.EditScene)
                {
                    scene.SaveSceneData();
                }
                //2020-12-03 需要讲最新的图片路径同步到云端
                scene.ImagePath = imageUrl;
                scene.EditScene();
            };
            //上传图片到云端
            UploadImage(selectImagePath, addSceneImageView, scene, uploadSuccessAction);
@@ -870,7 +816,7 @@
                        }.Show(bodyView);
                        return;
                    }
                    foreach (var tempRoom in DB_ResidenceData.functionList.scenes)
                    foreach (var tempRoom in FunctionList.List.scenes)
                    {
                        if (scene.name == tempRoom.name)
                        {
@@ -878,8 +824,8 @@
                            return;
                        }
                    }
                    scene.SaveSceneData();
                    DB_ResidenceData.functionList.scenes.Add(scene);
                    scene.EditScene();
                    FunctionList.List.scenes.Add(scene);
                    backAction();
                    this.RemoveFromParent();
                }
@@ -887,11 +833,11 @@
                {
                    Action action = () =>
                    {
                        DB_ResidenceData.functionList.DeleteScene(scene);
                        FunctionList.List.DeleteScene(scene,true);
                        backAction();
                        this.RemoveFromParent();
                    };
                    new PublicAssmebly().TipMsg(StringId.Tip, StringId.DeleteSceneTip, action);
                    new PublicAssmebly().TipOptionMsg(StringId.Tip, StringId.DeleteSceneTip, action);
                };
            };
        }
@@ -915,17 +861,17 @@
                    }.Show(bodyView);
                    return;
                }
                btnSceneName.Text = str;
                scene.name = str;
                if (pageTitleId == StringId.EditScene)
                var result = scene.EditScene();
                if (result == StateCode.SUCCESS)
                {
                    scene.SaveSceneData();
                    btnSceneName.Text = str;
                }
            };
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                List<string> sceneNameList = new List<string>();
                foreach (var tempScene in DB_ResidenceData.functionList.scenes)
                foreach (var tempScene in FunctionList.List.scenes)
                {
                    sceneNameList.Add(tempScene.name);
                }
@@ -946,7 +892,7 @@
        {
            try
            {
                MainPage.Log("SelectPicture 裁剪图片返回路径: " + selectImagePath);
                //MainPage.Log("SelectPicture 裁剪图片返回路径: " + selectImagePath);
                //1.读取裁剪后的图片,然后删除
                var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath);
                System.IO.File.Delete(selectImagePath);
@@ -962,7 +908,7 @@
                        var newImageName = mScene.name.Trim() + ".png";
                        var uploadImageObj = new UploadImageObj()
                        {
                            prefix = "ONS",
                            prefix = "Scene" + Utlis.GetTimestamp(),
                            fileName = newImageName,
                            uid = mScene.sid,
                            content = imageBytes,
@@ -974,15 +920,15 @@
                            //上传成功
                            Application.RunOnMainThread(() =>
                            {
                                Utlis.WriteLine("上传成功:" + imageUrl);
                                //Utlis.WriteLine("上传成功:" + imageUrl);
                                //1.2如果是自定义图片删除之前的
                                if (!string.IsNullOrEmpty(imageView.ImagePath) && !imageView.ImagePath.Contains("Classification/Room/Roombg"))
                                {
                                    Utlis.WriteLine("删除: " + imageView.ImagePath);
                                    //Utlis.WriteLine("删除: " + imageView.ImagePath);
                                    System.IO.File.Delete(imageView.ImagePath);
                                }
                                //重命名保存
                                FileUtils.WriteFileByBytes(imageUrl, imageBytes);
                                ImageUtlis.Current.WriteFileByBytes(imageUrl, imageBytes);
                                imageView.ImagePath = null;
                                imageView.ImageBytes = imageBytes;
                                //上传成功