From bba578c2f0acf2eca747edcb69426771e0cadd32 Mon Sep 17 00:00:00 2001
From: WJC <wjc@hdlchina.com.cn>
Date: 星期一, 23 三月 2020 18:20:50 +0800
Subject: [PATCH] 2020-03-23-3

---
 ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs |  424 ++++++++++++++++++++++++++++------------------------
 1 files changed, 231 insertions(+), 193 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs b/ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
index d8341ed..f94a50e 100755
--- a/ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
+++ b/ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
@@ -6,8 +6,10 @@
 
 namespace Shared.Phone.Device.CommonForm
 {
-    public class SceneCategoryView : FrameLayout
-    {
+    public class SceneCategoryView : RowLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
         /// <summary>
         /// scene
         /// </summary>
@@ -15,174 +17,121 @@
         /// <summary>
         /// room
         /// </summary>
-        public Shared.Common.Room room;
+        private Common.Room room;
         /// <summary>
-        /// delayTimeBtn
+        /// 寤舵椂鏃堕棿
         /// </summary>
-        private Button delayTimeBtn;
+        private NormalViewControl btnDelayTime;
         /// <summary>
-        /// delayImgBtn
+        /// 寤舵椂鍥炬爣
         /// </summary>
-        private Button delayImgBtn;
-        /// <summary>
-        /// sceneImg
-        /// </summary>
-        private ImageView sceneImg;
-
+        private IconViewControl btnDelayIcon;
+        /// <summary>
+        /// 鍦烘櫙鍥剧墖鎺т欢
+        /// </summary>
+        private ScenePictrueControl sceneContr = null;
+        /// <summary>
+        /// 鏄惁宸茬粡瀹屾垚鎺т欢鍒濆鍖栫粨鏉�
+        /// </summary>
+        private bool isInitControlFinish = false;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
         /// <summary>
         /// SceneCategoryView
         /// </summary>
-        /// <param name="x"></param>
-        /// <param name="y"></param>
-        public SceneCategoryView(int x, int y)
+        public SceneCategoryView()
         {
-            X = Application.GetRealWidth(x);
-            Y = Application.GetRealHeight(y);
-            Width = Application.GetRealWidth(1080);
-            Height = Application.GetRealHeight(397 + 46);
-            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
-        }
-
-        /// <summary>
-        /// init
-        /// </summary>
-        public void Init(SceneUI sceneUI,Common.Room curRoom)
-        {
-            this.scene = sceneUI;
-            this.room = curRoom;
-
-            InitFrame();
-        }
-
-        /// <summary>
-        /// InitFrame
-        /// </summary>
-        private void InitFrame()
-        {
-            RemoveAll();
-            var sceneRowLayout = new RowLayout
-            {
-                Height = Application.GetRealHeight(440),
-                LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
-                Tag = scene
+            this.Width = Application.GetRealWidth(1080);
+            this.Height = Application.GetRealHeight(397 + 46);
+            this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
+            this.IsUseSameSubViewWidth = false;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        /// <param name="i_scene"></param>
+        public void InitControl(SceneUI i_scene, Common.Room i_room)
+        {
+            this.RemoveAll();
+
+            this.LineColor = UserCenterColor.Current.Transparent;
+
+            this.scene = i_scene;
+            this.room = i_room;
+
+            //鑷畾涔夌殑鍦烘櫙鍥剧墖鎺т欢
+            this.sceneContr = new ScenePictrueControl();
+            this.AddChidren(sceneContr);
+            sceneContr.InitControl(this.scene);
+
+            //鍦烘櫙鐐瑰嚮
+            sceneContr.ButtonClickEvent += (sender, e) =>
+            {
+                this.SceneUpHandler();
             };
-            AddChidren(sceneRowLayout);
 
-            sceneImg = new ImageView()
-            {
-                X = Application.GetRealWidth(179),
-                Width = Application.GetRealWidth(844),
-                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);
-            //闃村奖
-            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
-            {
-                X = Application.GetRealWidth(CommonFormResouce.X_Left),
-                Y = Application.GetRealHeight(58),
-                Width = Application.GetRealWidth(251),
-                Height = Application.GetRealHeight(282),
-                BackgroundColor = 0xd6333333,
-                Radius = (uint)Application.GetRealHeight(17)
-            };
-            sceneRowLayout.AddChidren(leftFL);
-
-            var collectionBtn = new Button
-            {
-                X = Application.GetRealWidth(23),
-                Y = Application.GetRealHeight(23),
-                Width = Application.GetMinRealAverage(65),
-                Height = Application.GetMinRealAverage(65),
-                UnSelectedImagePath = "Item/Collection.png",
-                SelectedImagePath = "Item/CollectionSelected.png",
-                IsSelected = HdlRoomLogic.Current.IsCollectInRoom(scene),
-                Tag = scene
-            };
-            leftFL.AddChidren(collectionBtn);
-
-            var sceneNameBtn = new Button()
-            {
-                Width = Application.GetRealWidth(176),
-                Height = Application.GetRealHeight(150),
-                TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
-                Text = scene.Name,
-                Gravity = Gravity.Center,
-                IsMoreLines = true
-            };
-            leftFL.AddChidren(sceneNameBtn);
-
-            var collection = new Button
-            {
-                Tag = scene
-            };
-            leftFL.AddChidren(collection);
-            collection.MouseUpEventHandler += (sender, e) =>
-            {
+            //鏀惰棌
+            sceneContr.AddCollectionControl();
+            sceneContr.CollectEvent += (collect) =>
+            {
                 if (room.IsLove)
                 {
-                    HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
-                    RemoveViewByTag(collectionBtn.Tag);
-                }
-                else
-                {
-                    collectionBtn.IsSelected = !collectionBtn.IsSelected;
-                    if (collectionBtn.IsSelected)
-                    {
-                        HdlSceneLogic.Current.AddScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
-                    }
-                    else
-                    {
-                        HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
-                    }
-                }
+                    this.RemoveFromParent();
+                }
             };
 
-            delayTimeBtn = new Button
-            {
-                X = Application.GetRealWidth(780),
-                Y = Application.GetRealHeight(317),
-                Width = Application.GetRealWidth(200),
-                Height = Application.GetRealHeight(58),
-                Text = CommonFormResouce.GetTimeString(scene.SceneDelayTime),
-                TextAlignment = TextAlignment.CenterRight,
-                TextColor = ZigbeeColor.Current.GXCTextSelectedColor3
-            };
-            sceneRowLayout.AddChidren(delayTimeBtn);
+            //寤舵椂鏃堕棿
+            this.btnDelayTime = new NormalViewControl(200, 58, true);
+            btnDelayTime.X = Application.GetRealWidth(780);
+            btnDelayTime.Y = Application.GetRealHeight(317);
+            btnDelayTime.Text = CommonFormResouce.GetTimeString(scene.SceneDelayTime);
+            btnDelayTime.TextAlignment = TextAlignment.CenterRight;
+            btnDelayTime.TextColor = ZigbeeColor.Current.GXCTextSelectedColor3;
+            btnDelayTime.IsBold = true;
+            this.AddChidren(btnDelayTime);
 
-            delayImgBtn = new Button
-            {
-                X = Application.GetRealWidth(900),
-                Y = Application.GetRealHeight(30),
-                Width = Application.GetMinRealAverage(52),
-                Height = Application.GetMinRealAverage(52),
-                UnSelectedImagePath = "Scene/Delaying.png",
-                Visible=false
-            };
-            sceneRowLayout.AddChidren(delayImgBtn);
+            //寤舵椂鍥炬爣
+            this.btnDelayIcon = new IconViewControl(52);
+            btnDelayIcon.X = Application.GetRealWidth(900);
+            btnDelayIcon.Y = Application.GetRealHeight(30);
+            btnDelayIcon.Width = Application.GetMinRealAverage(52);
+            btnDelayIcon.Height = Application.GetMinRealAverage(52);
+            btnDelayIcon.UnSelectedImagePath = "Scene/Delaying.png";
+            this.AddChidren(btnDelayIcon);
+            btnDelayIcon.Visible = false;
 
-            sceneRowLayout.SubViewWidth = Application.GetRealWidth(199);
+            if (isInitControlFinish == true)
+            {
+                //缂栬緫鍦烘櫙鐨勫洖璋冨嚱鏁颁細閲嶆柊鍒锋柊鎺т欢
+                //鎵�浠ヨ繖閲屼笉鍐嶅垵濮嬪寲
+                return;
+            }
+            this.isInitControlFinish = true;
+
+            //娣诲姞宸﹁竟鐨勭┖鐧藉尯鍩�
+            var btnTemp1 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false);
+            this.AddLeftView(btnTemp1);
             //瀹氭椂
-            var btnDelay = new NormalViewControl(Application.GetRealWidth(199), sceneRowLayout.Height, false);
+            var btnDelay = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.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.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight |
+                HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight);
+            this.AddLeftView(btnDelay);
             //鍙樻洿鎸夐挳鐨勯珮搴�
-            btnDelay.Height = sceneImg.Height;
+            btnDelay.Height = sceneContr.btnScenePic.Height;
+            btnDelay.Y = 0;
 
-             //缂栬緫
-             var btnEditor = new NormalViewControl(Application.GetRealWidth(199), sceneImg.Height, false);
+            //缂栬緫
+            var btnEditor = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false);
             btnEditor.BackgroundColor = ZigbeeColor.Current.GXCEditBackGroundColor;
             btnEditor.TextID = R.MyInternationalizationString.Edit;
             btnEditor.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
@@ -191,22 +140,27 @@
             btnEditor.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft);
 
             //鍒犻櫎
-            var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneImg.Height, false);
+            var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.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);
-            
+            btnDelete.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
+
             if (room.IsSharedRoom == false && room.IsLove == false)
             {
                 //涓嶆槸鍒嗕韩,骞朵笖涓嶆槸鏀惰棌
-                sceneRowLayout.AddRightView(btnEditor);
-                sceneRowLayout.AddRightView(btnDelete);
+                this.AddRightView(btnEditor);
+                this.AddRightView(btnDelete);
                 //鍙樻洿鎸夐挳鐨勯珮搴�
-                btnEditor.Height = sceneImg.Height;
-                btnDelete.Height = sceneImg.Height;
+                btnEditor.Height = sceneContr.btnScenePic.Height;
+                btnEditor.Y = 0;
+                btnDelete.Height = sceneContr.btnScenePic.Height;
+                btnDelete.Y = 0;
+                //娣诲姞鍙宠竟绌虹櫧鍖哄煙
+                var btnTemp2 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false);
+                this.AddRightView(btnTemp2);
             }
 
             //鍒犻櫎鍦烘櫙
@@ -253,6 +207,8 @@
             {
                 try
                 {
+                    //鍏抽棴宸︽粦鑿滃崟
+                    this.HideMenu();
                     var targetList = new List<SceneTargetDeviceUI> { };
                     CommonPage.Loading.Start();
                     //浠庣綉鍏充腑鍙嶅簭鍒楀寲鍑哄搴旂殑鎴块棿璁惧
@@ -261,8 +217,8 @@
                     {
                         CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheMainGatewayIsNotOnLine));
                         return;
-                    }
-                   
+                    }
+
                     if (sceneDeviceList.getSceneDeviceListInfo != null)
                     {
                         var deviceList = sceneDeviceList.getSceneDeviceListInfo.DeviceList;
@@ -339,6 +295,30 @@
                         }
                         else
                         {
+                            this.InitControl(s, r);
+                        }
+                    }
+                    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);
                         }
                     };
@@ -366,63 +346,64 @@
                 timeSelect.Init();
                 timeSelect.TimeAction = (t) =>
                 {
+                    //闅愯棌鍙冲垝鑿滃崟
+                    this.HideMenu();
                     scene.SceneDelayTime = t;
-                    delayTimeBtn.Text = CommonFormResouce.GetTimeString(t);
+                    btnDelayTime.Text = CommonFormResouce.GetTimeString(t);
                 };
-            };
-        }
+            };
+        }
+
+        #endregion
 
-        /// <summary>
-        /// SceneUpHandler
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="args"></param>
-        private async void SceneUpHandler(object sender, MouseEventArgs args)
+        /// <summary>
+        ///
+        /// </summary>
+        /// <param name="btnScenePic"></param>
+        /// <param name="btnSceneName"></param>
+        private async void SceneUpHandler()
         {
-            if (scene.RemainTime > 0 && scene.SceneDelayTime == 0)
-            {
-                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
-                return;
+            if (scene.SceneDelayTime <= 0 && scene.RemainTime <= 0)
+            {
+                //濡傛灉娌℃湁寤惰繜鐨勮瘽,鐩存帴寮�鍚疞oading鐗规晥
+                this.StartLoadingApreal();
             }
-            //1鎴愬姛 0澶辫触
-            //鍚庨潰琛ヤ笂鐩稿叧鎻愮ず
-            // Error鍙傛暟鍚箟
-            //<para>1锛氱綉鍏虫棤娉曡В鏋愬懡浠ゆ暟鎹��</para>
-            //<para>2锛氬崗璋冨櫒姝e湪鍗囩骇鎴栧浠�/鎭㈠鏁版嵁
-            //<para>3锛氭搷浣滆澶�/缁�/鍦烘櫙涓嶅瓨鍦�</para>
-            //<para>4锛氬叾浠栭敊璇�</para>
-            //<para>5锛氭暟鎹紶杈撻敊璇紙鍦ㄦ煇娆″鎴风鍚戠綉鍏冲彂閫佹暟鎹殑杩囩▼涓紝缃戝叧鍦ㄥ悎鐞嗘椂闂磋寖鍥村唴鎺ユ敹瀹㈡埛绔暟鎹笉瀹屾暣瀵艰嚧璇ラ敊璇彂鐢熴�傚瀹㈡埛绔悜缃戝叧涓�娆″彂閫�100涓瓧鑺傜殑鏁版嵁锛屼絾缃戝叧绛夊緟鎺ユ敹浜嗕竴绉掑彧鎺ユ敹浜�80涓瓧鑺傘�傚彂鐢熻閿欒锛岀綉鍏冲皢涓诲姩鍏抽棴瀹㈡埛绔繛鎺ワ級</para>
-            var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime);
-
-            if (sceneOpenAllData == null || sceneOpenAllData.sceneOpenData == null)
+            //璋冪敤鍦烘櫙
+            var result = await HdlSceneLogic.Current.ControlScene(scene);
+            if (result == false)
             {
                 return;
-            }
-            if (sceneOpenAllData.sceneOpenData.Result == 0)
-            {
-                if (sceneOpenAllData.errorResponData == null)
-                {
-                    return;
-                }
-                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.ControlSceneFail));
             }
 
             scene.RemainTime = scene.SceneDelayTime;
             scene.SceneDelayTime = 0;
+            if (scene.RemainTime <= 0)
+            {
+                return;
+            }
+            int myRemainTime = scene.RemainTime;
+            //寮�鍚唴閮ㄥ欢鏃舵椂闂寸嚎绋�(鏃ㄥ湪鍏ㄩ儴鍦版柟鐨勫悓涓�鍦烘櫙鏃堕棿鍚屾)
+            HdlSceneLogic.Current.StartDelayTimeThread(scene);
+
             new System.Threading.Thread(() =>
             {
-                while (scene.RemainTime > 0)
+                while (myRemainTime > 0 && this.Parent != null)
                 {
                     System.Threading.Thread.Sleep(1000);
                     Application.RunOnMainThread(() =>
                     {
                         SetTimeText(CommonFormResouce.GetTimeString(scene.RemainTime));
                     });
-                    scene.RemainTime -= 1;
+                    myRemainTime--;
                 }
                 Application.RunOnMainThread(() =>
                 {
-                    SetTimeImage();
+                    if (this.Parent != null)
+                    {
+                        SetTimeImage();
+                        //鐩存帴寮�鍚疞oading鐗规晥
+                        this.StartLoadingApreal();
+                    }
                 });
             })
             { IsBackground = true }.Start();
@@ -434,8 +415,8 @@
         /// <param name="name"></param>
         public void SetTimeText(string name)
         {
-            delayImgBtn.Visible = true;
-            delayTimeBtn.Text = name;
+            btnDelayIcon.Visible = true;
+            btnDelayTime.Text = name;
         }
 
         /// <summary>
@@ -443,8 +424,65 @@
         /// </summary>
         public void SetTimeImage()
         {
-            delayImgBtn.Visible = false;
-            delayTimeBtn.Text = string.Empty;
+            btnDelayIcon.Visible = false;
+            btnDelayTime.Text = string.Empty;
+        }
+
+        /// <summary>
+        /// 寮�鍚疞oading鐗规晥
+        /// </summary>
+        public void StartLoadingApreal()
+        {
+            //寮勪釜閬僵閬綇
+            var frameBack1 = new FrameLayout();
+            frameBack1.Y = sceneContr.btnScenePic.Y;
+            frameBack1.X = sceneContr.btnScenePic.X;
+            frameBack1.Width = sceneContr.btnScenePic.Width;
+            frameBack1.Height = sceneContr.btnScenePic.Height;
+            frameBack1.Radius = (uint)Application.GetRealHeight(17);
+            frameBack1.BackgroundColor = 0xb3000000;
+            this.AddChidren(frameBack1);
+
+            var frameBack2 = new FrameLayout();
+            frameBack2.Y = sceneContr.btnSceneName.Y;
+            frameBack2.X = sceneContr.btnSceneName.X;
+            frameBack2.Width = sceneContr.btnSceneName.Width;
+            frameBack2.Height = sceneContr.btnSceneName.Height;
+            frameBack2.Radius = (uint)Application.GetRealHeight(17);
+            frameBack2.BackgroundColor = 0xb3000000;
+            this.AddChidren(frameBack2);
+
+            //鍐嶅姞涓浆鍦堢殑
+            var loadContr = new MyProgressLoading();
+            loadContr.LoadingBackgroundColor = UserCenterColor.Current.Transparent;
+            frameBack1.AddChidren(loadContr);
+            loadContr.StartLoading(1000);
+            loadContr.DisponeEvent += () =>
+            {
+                frameBack1.RemoveFromParent();
+                frameBack2.RemoveFromParent();
+            };
+        }
+
+        /// <summary>
+        /// 鑷畾涔夋帶浠�(闇�瑕佺殑瀹冪Щ闄や簨浠�)
+        /// </summary>
+        private class MyProgressLoading : ProgressLoading
+        {
+            /// <summary>
+            /// 鎺т欢閿�姣佺殑浜嬩欢
+            /// </summary>
+            public Action DisponeEvent = null;
+            /// <summary>
+            /// 鎺т欢閿�姣�
+            /// </summary>
+            public override void RemoveFromParent()
+            {
+                base.RemoveFromParent();
+
+                this.DisponeEvent?.Invoke();
+                this.DisponeEvent = null;
+            }
         }
     }
 }

--
Gitblit v1.8.0