WJC
2020-03-17 bbaae33cad1dadaad27eeac712d30fff248bffa5
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
@@ -1,5 +1,9 @@
using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.Device.Category;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Device.CommonForm
{
    public class SceneCategoryView : FrameLayout
@@ -23,7 +27,7 @@
        /// <summary>
        /// sceneImg
        /// </summary>
        private Button sceneImg;
        private ImageView sceneImg;
        /// <summary>
        /// SceneCategoryView
@@ -35,7 +39,7 @@
            X = Application.GetRealWidth(x);
            Y = Application.GetRealHeight(y);
            Width = Application.GetRealWidth(1080);
            Height = Application.GetRealHeight(446);
            Height = Application.GetRealHeight(397 + 46);
            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
        }
@@ -48,7 +52,6 @@
            this.room = curRoom;
            InitFrame();
            InitStatu();
        }
        /// <summary>
@@ -56,23 +59,30 @@
        /// </summary>
        private void InitFrame()
        {
            RemoveAll();
            var sceneRowLayout = new RowLayout
            {
                Y = Application.GetRealHeight(46),
                Height = Application.GetRealHeight(446 - 46),
                LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor
                Height = Application.GetRealHeight(440),
                LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
                Tag = scene
            };
            AddChidren(sceneRowLayout);
            sceneImg = new Button()
            sceneImg = new ImageView()
            {
                X = Application.GetRealWidth(179),
                Width = Application.GetRealWidth(844),
                Height = Application.GetRealHeight(400),
                UnSelectedImagePath = scene.IconPath,
                Height = Application.GetRealHeight(397),
                ImagePath = scene.IconPathType == 0 ? scene.IconPath : System.IO.Path.Combine(Config.Instance.FullPath, scene.IconPath),
                Radius = (uint)Application.GetRealHeight(17)
            };
            sceneRowLayout.AddChidren(sceneImg);
            sceneRowLayout.AddChidren(sceneImg);
            //阴影
            var btnShadow = new PicViewControl(sceneImg.Width + Application.GetRealWidth(14 * 2), sceneImg.Height + Application.GetRealHeight(43), false);
            btnShadow.X = sceneImg.X - Application.GetRealWidth(14);
            btnShadow.UnSelectedImagePath = "Scene/SceneShadow.png";
            sceneRowLayout.AddChidren(btnShadow);
            btnShadow.ButtonClickEvent += this.SceneUpHandler;
            var leftFL = new FrameLayout
            {
@@ -80,7 +90,7 @@
                Y = Application.GetRealHeight(58),
                Width = Application.GetRealWidth(251),
                Height = Application.GetRealHeight(282),
                BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2,
                BackgroundColor = 0xd6333333,
                Radius = (uint)Application.GetRealHeight(17)
            };
            sceneRowLayout.AddChidren(leftFL);
@@ -93,7 +103,7 @@
                Height = Application.GetMinRealAverage(65),
                UnSelectedImagePath = "Item/Collection.png",
                SelectedImagePath = "Item/CollectionSelected.png",
                IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName),
                IsSelected = HdlRoomLogic.Current.IsCollectInRoom(scene),
                Tag = scene
            };
            leftFL.AddChidren(collectionBtn);
@@ -118,19 +128,19 @@
            {
                if (room.IsLove)
                {
                    Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                    HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    RemoveViewByTag(collectionBtn.Tag);
                }
                else
                {
                    collectionBtn.IsSelected = !collectionBtn.IsSelected;
                    if (collectionBtn.IsSelected)
                    {
                        Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
                    {
                        HdlSceneLogic.Current.AddScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    }
                    else
                    {
                        Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                        HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    }
                }
            };
@@ -156,103 +166,194 @@
                UnSelectedImagePath = "Scene/Delaying.png",
                Visible=false
            };
            sceneRowLayout.AddChidren(delayImgBtn);
            //定时
            var delayBtn = new RowLayoutDeleteButton
            {
                TextID = R.MyInternationalizationString.Delay,
                Tag = scene.SceneDelayTime
            };
            sceneRowLayout.AddLeftView(delayBtn);
            //编辑
            var settingBtn = new Device.CommonForm.RowLayoutEditButton()
            {
                TextID = R.MyInternationalizationString.Editor,
                Tag = scene.SceneDelayTime
            };
            //删除
            var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton
            {
                Tag = scene
            };
            if (room.IsSharedRoom)
            {
            }
            else
            {
                if (room.IsLove)
                {
                    sceneRowLayout.AddRightView(deleteBtn);
                }
                else
                {
                    sceneRowLayout.AddRightView(settingBtn);
                    sceneRowLayout.AddRightView(deleteBtn);
                }
            sceneRowLayout.AddChidren(delayImgBtn);
            sceneRowLayout.SubViewWidth = Application.GetRealWidth(199);
            //定时
            var btnDelay = new NormalViewControl(Application.GetRealWidth(199), sceneRowLayout.Height, false);
            btnDelay.BackgroundColor = ZigbeeColor.Current.GXCTextSelectedColor;
            btnDelay.TextID = R.MyInternationalizationString.Delay;
            btnDelay.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelay.TextAlignment = TextAlignment.Center;
            btnDelay.Tag = scene.SceneDelayTime;
            btnDelay.Radius = (uint)Application.GetRealHeight(17);
            sceneRowLayout.AddLeftView(btnDelay);
            //变更按钮的高度
            btnDelay.Height = sceneImg.Height;
             //编辑
             var btnEditor = new NormalViewControl(Application.GetRealWidth(199), sceneImg.Height, false);
            btnEditor.BackgroundColor = ZigbeeColor.Current.GXCEditBackGroundColor;
            btnEditor.TextID = R.MyInternationalizationString.Edit;
            btnEditor.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnEditor.TextAlignment = TextAlignment.Center;
            btnEditor.Tag = scene.SceneDelayTime;
            btnEditor.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft);
            //删除
            var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneImg.Height, false);
            btnDelete.Tag = scene;
            btnDelete.BackgroundColor = ZigbeeColor.Current.GXCRedColor;
            btnDelete.TextID = R.MyInternationalizationString.Delete;
            btnDelete.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelete.TextAlignment = TextAlignment.Center;
            btnDelete.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
            if (room.IsSharedRoom == false && room.IsLove == false)
            {
                //不是分享,并且不是收藏
                sceneRowLayout.AddRightView(btnEditor);
                sceneRowLayout.AddRightView(btnDelete);
                //变更按钮的高度
                btnEditor.Height = sceneImg.Height;
                btnDelete.Height = sceneImg.Height;
            }
            //删除场景
            EventHandler<MouseEventArgs> delEvent = (sender, e) =>
            {
                if (room.IsLove)
                {
                    Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                    RemoveViewByTag((sender as Button).Tag);
                }
                else
                {
                    var tip = new CustomAlert { };
                    AddChidren(tip);
                    tip.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
            btnDelete.ButtonClickEvent += (sender, e) =>
            {
                var alert = new ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
                alert.Show();
                alert.ConfirmClickEvent += async () =>
                {
                    //0 移除失败 1 移除成功 2 没有该场景
                    var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
                    if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
                    {
                        CommonPage.Instance.FailureToServer();
                        return;
                    }
                    //1成功
                    if (removeSceneAllData.removeSceneData.Result == 1)
                    {
                        HdlSceneLogic.Current.RemoveScene(scene);
                        //RefreshBodyView();
                        RemoveFromParent();
                    }
                    //0 移除失败
                    else if (removeSceneAllData.removeSceneData.Result == 0)
                    {
                        CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain));
                        return;
                    }
                    //2 没有该场景
                    else if (removeSceneAllData.removeSceneData.Result == 2)
                    {
                        HdlSceneLogic.Current.RemoveScene(scene);
                        //RefreshBodyView();
                        RemoveFromParent();
                        CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsNull));
                        return;
                    }
                };
            };
                    tip.ResultEventHandler += async (e1) =>
            //编辑场景
            btnEditor.ButtonClickEvent += async (sender, e) =>
            {
                try
                {
                    var targetList = new List<SceneTargetDeviceUI> { };
                    CommonPage.Loading.Start();
                    //从网关中反序列化出对应的房间设备
                    var sceneDeviceList = await ZigBee.Device.Scene.GetSceneDeviceListAsync(scene.Id);
                    if (sceneDeviceList == null)
                    {
                        if (e1)
                        CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheMainGatewayIsNotOnLine));
                        return;
                    }
                    if (sceneDeviceList.getSceneDeviceListInfo != null)
                    {
                        var deviceList = sceneDeviceList.getSceneDeviceListInfo.DeviceList;
                        var allDevice = HdlRoomLogic.Current.GetAllRoomListDevice();
                        var allScene = HdlSceneLogic.Current.GetAllRoomSceneList();
                        if (deviceList != null && allDevice.Count != 0)
                        {
                            //0 移除失败 1 移除成功 2 没有该场景
                            var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
                            if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
                            foreach (var sceneDev in deviceList)
                            {
                                CommonPage.Instance.FailureToServer();
                                return;
                                if (sceneDev.Type == 0)
                                {
                                    var dev = allDevice.Find((obj) => obj.DeviceEpoint == sceneDev.Epoint && obj.DeviceAddr == sceneDev.DeviceAddr);
                                    if (dev != null)
                                    {
                                        var sceneTargetDevice = new SceneTargetDeviceUI
                                        {
                                            Type = 0,
                                            DeviceUI = dev,
                                            TaskList = sceneDev.TaskList,
                                            DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1
                                        };
                                        targetList.Add(sceneTargetDevice);
                                    }
                                }
                                else if (sceneDev.Type == 1)
                                {
                                    var localScene = allScene.Find((obj) => obj.Id == sceneDev.ElseScenesId);
                                    if (localScene != null)
                                    {
                                        var sceneTargetDeviceScene = new SceneTargetDeviceUI
                                        {
                                            Type = 1,
                                            ElseScenesId = sceneDev.ElseScenesId,
                                            SceneName = localScene.Name,
                                            SceneUI = localScene,
                                            DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1
                                        };
                                        targetList.Add(sceneTargetDeviceScene);
                                    }
                                }
                                else
                                {
                                    var sceneTargetDeviceScene = new SceneTargetDeviceUI
                                    {
                                        Type = 2,
                                        DelayTime = sceneDev.DelayTime,
                                        DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1
                                    };
                                    targetList.Add(sceneTargetDeviceScene);
                                }
                            }
                            //1成功
                            if (removeSceneAllData.removeSceneData.Result == 1)
                            {
                                room.RemoveScene(scene);
                                //RefreshBodyView();
                                RemoveViewByTag((sender as Button).Tag);
                            }
                            //0 移除失败
                            else if (removeSceneAllData.removeSceneData.Result == 0)
                            {
                                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
                                return;
                            }
                            //2 没有该场景
                            else if (removeSceneAllData.removeSceneData.Result == 2)
                            {
                                room.RemoveScene(scene);
                                //RefreshBodyView();
                                RemoveViewByTag((sender as Button).Tag);
                                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheSceneIsNull);
                                return;
                            }
                        }
                    }
                    else
                    {
                        CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain));
                    }
                    var sceneView = new CategoryAddScene();
                    Phone.UserView.HomePage.Instance.AddChidren(sceneView);
                    Phone.UserView.HomePage.Instance.PageIndex += 1;
                    sceneView.isModify = true;
                    sceneView.modifyRoom = room;
                    sceneView.modifySceneUI = scene;
                    sceneView.modifySceneTargetDevicesList = targetList;
                    sceneView.Show();
                    sceneView.EditorAction = (s, r) =>
                    {
                        if (r.Id != room.Id)
                        {
                            RemoveFromParent();
                        }
                        else
                        {
                            Init(s, r);
                        }
                    };
                }
            };
            deleteBtn.MouseUpEventHandler += delEvent;
            //编辑场景
            settingBtn.MouseUpEventHandler += (sender, e) =>
            {
                SceneUI.EditScene(scene, room);
                catch (Exception ex)
                {
                    System.Console.WriteLine($"编辑场景出错---{ex.Message}");
                }
                finally
                {
                    CommonPage.Loading.Hide();
                }
            };
            //编辑延时
            delayBtn.MouseUpEventHandler += (sender, e) =>
            btnDelay.ButtonClickEvent += (sender, e) =>
            {
                if (scene.RemainTime > 0)
                {
@@ -269,14 +370,6 @@
                    delayTimeBtn.Text = CommonFormResouce.GetTimeString(t);
                };
            };
        }
        /// <summary>
        /// InitStatu
        /// </summary>
        private void InitStatu()
        {
            sceneImg.MouseUpEventHandler += SceneUpHandler;
        }
        /// <summary>
@@ -311,7 +404,7 @@
                {
                    return;
                }
                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail);
                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.ControlSceneFail));
            }
            scene.RemainTime = scene.SceneDelayTime;