From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期四, 16 四月 2020 17:10:57 +0800
Subject: [PATCH] 请合并代码

---
 ZigbeeApp/Shared/Phone/UserCenter/Safety/AlarmTargetAddMenuForm.cs |  391 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 391 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Safety/AlarmTargetAddMenuForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Safety/AlarmTargetAddMenuForm.cs
new file mode 100755
index 0000000..945475a
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Safety/AlarmTargetAddMenuForm.cs
@@ -0,0 +1,391 @@
+锘縰sing System;
+using System.Collections.Generic;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.Safety
+{
+    /// <summary>
+    /// 娣诲姞鎶ヨ鐩爣鑿滃崟鍒楄〃鐨勭敾闈�
+    /// </summary>
+    public class AlarmTargetAddMenuForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 闃插尯ID(杩欎釜涓滆タ浼间箮鏄敮涓�鐨�)
+        /// </summary>
+        private int zoonID = 0;
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        /// <summary>
+        /// 鍏ㄩ儴鐨勬暟鎹�(keys1:鎴块棿ID   Keys2:R鏂囦欢鐨勬暟鍊�)
+        /// </summary>
+        private Dictionary<string, Dictionary<int, uRowInformation>> dicAllData = new Dictionary<string, Dictionary<int, uRowInformation>>();
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬ゼ灞侷D
+        /// </summary>
+        private string nowSelectFloorId = string.Empty;
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勬埧闂�
+        /// </summary>
+        private Common.Room nowSelectRoom = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_zoonID">闃插尯ID</param>
+        public void ShowForm(int i_zoonID)
+        {
+            this.zoonID = i_zoonID;
+
+            //璁剧疆澶撮儴淇℃伅
+            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddAlarmTarget));
+
+            //鍒濆鍖栧彸涓婅鐨勬帶浠�
+            this.InitTopRightMenuControl();
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+            this.nowSelectRoom = null;
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                //鑾峰彇璁惧鐨勬墍鏈夌被鍨嬶紝骞舵暣鐞嗘垚姣忎竴琛岀殑鏁版嵁
+                this.dicAllData = this.GetAllListData();
+                if (dicAllData.Count == 0)
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        //娌℃湁鍙互娣诲姞鐨勭洰鏍�
+                        this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddTarget));
+                    });
+                    return;
+                }
+
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍒濆鍖栨埧闂村拰璁惧鎺т欢
+                    this.InitRoomAndDeviceControl();
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨埧闂村拰璁惧鎺т欢
+        /// </summary>
+        private void InitRoomAndDeviceControl()
+        {
+            var listRoom = new List<Common.Room>();
+            foreach (string roomId in this.dicAllData.Keys)
+            {
+                listRoom.Add(HdlRoomLogic.Current.GetRoomById(roomId));
+            }
+
+            //鍒濆鍖栨埧闂磋彍鍗曟帶浠�
+            var frameBack = new FrameLayout();
+            frameBack.Height = Application.GetRealHeight(204);
+            bodyFrameLayout.AddChidren(frameBack);
+            var roomMuneContr = new RoomDeviceGroupMenuControl(listRoom);
+            roomMuneContr.Gravity = Gravity.CenterVertical;
+            frameBack.AddChidren(roomMuneContr);
+            roomMuneContr.SelectRoomEvent += (selectRoom) =>
+            {
+                //璁板綍褰撳墠閫夋嫨鐨勬埧闂�
+                this.nowSelectRoom = selectRoom;
+                //杩樺師鍒楄〃楂樺害
+                listView.Height = bodyFrameLayout.Height - frameBack.Bottom;
+                //鍒濆鍖栬鎺т欢
+                this.InitRowControl(dicAllData[selectRoom.Id]);
+            };
+
+            this.listView = new VerticalListControl(29);
+            listView.Y = frameBack.Bottom;
+            listView.Height = bodyFrameLayout.Height - frameBack.Bottom;
+            listView.BackgroundColor = UserCenterColor.Current.White;
+            bodyFrameLayout.AddChidren(this.listView);
+
+            //寮�濮嬪垵濮嬪寲鎴块棿鎺т欢,鐒跺悗瀹冧細鏍规嵁榛樿鍊艰皟鐢ㄥ洖璋冨嚱鏁�
+            roomMuneContr.InitControl();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧彸涓婅鐨勬帶浠�
+        /// </summary>
+        private void InitTopRightMenuControl()
+        {
+            //鑾峰彇妤煎眰
+            var dicFloor = HdlRoomLogic.Current.GetFloorSortList();
+            if (dicFloor.Count == 0)
+            {
+                return;
+            }
+            var btnIconContr = new MostRightIconControl(69, 69);
+            btnIconContr.UnSelectedImagePath = "Item/Drop_Down.png";
+            topFrameLayout.AddChidren(btnIconContr);
+            btnIconContr.InitControl();
+
+            var btnFloor = new NormalViewControl(300, 69, true);
+            btnFloor.Gravity = Gravity.CenterVertical;
+            btnFloor.X = btnIconContr.X + btnIconContr.btnIcon.X - Application.GetRealWidth(300);
+            btnFloor.TextAlignment = TextAlignment.CenterRight;
+            btnFloor.IsBold = true;
+            topFrameLayout.AddChidren(btnFloor);
+
+            foreach (var floorId in dicFloor.Keys)
+            {
+                //绗竴涓ゼ灞�
+                this.nowSelectFloorId = floorId;
+                btnFloor.Text = dicFloor[floorId];
+                break;
+            }
+
+            btnIconContr.ButtonClickEvent += (sender, e) =>
+            {
+                //妤煎眰鑿滃崟
+                var contr = new TopRightFloorMenuControl(dicFloor.Count, 2, Language.StringByID(R.MyInternationalizationString.SelectFloor));
+                foreach (var floorId in dicFloor.Keys)
+                {
+                    contr.AddRowMenu(floorId, () =>
+                    {
+                        //璁板綍璧烽�夋嫨鐨処D
+                        this.nowSelectFloorId = floorId;
+                        btnFloor.Text = dicFloor[this.nowSelectFloorId];
+                        //鍒濆鍖栦腑閮ㄤ俊鎭�
+                        this.InitMiddleFrame();
+                    });
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞琛宊____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栬鎺т欢
+        /// </summary>
+        /// <param name="dicRowData"></param>
+        private void InitRowControl(Dictionary<int, uRowInformation> dicRowData)
+        {
+            this.listView.RemoveAll();
+            HdlThreadLogic.Current.RunMainInThread(() =>
+            {
+                int count = 0;
+                foreach (var textId in dicRowData.Keys)
+                {
+                    count++;
+                    var rowData = dicRowData[textId];
+
+                    var rowlayout = new FrameRowControl(listView.rowSpace / 2);
+                    listView.AddChidren(rowlayout);
+                    //鍥炬爣
+                    var btnIcon = rowlayout.AddLeftIcon(81);
+                    btnIcon.UnSelectedImagePath = rowData.IconPath;
+
+                    //璁惧鍚�
+                    var txtDevice = rowlayout.AddLeftCaption(Language.StringByID(textId), 750);
+                    txtDevice.TextSize = 15;
+                    //鍚戝彸鍥炬爣
+                    rowlayout.AddRightArrow();
+                    if (count != dicRowData.Count)
+                    {
+                        //搴曠嚎
+                        rowlayout.AddBottomLine();
+                    }
+
+                    //鍗曞嚮浜嬩欢
+                    rowlayout.ButtonClickEvent += (sender, e) =>
+                    {
+                        if (rowData.listScene == null)
+                        {
+                            //璁惧鐨勪竴瑙�
+                            var form = new AlarmTargetAddDeviceForm();
+                            form.AddForm(this.zoonID, txtDevice.Text, rowData.listDevice);
+                        }
+                        else
+                        {
+                            //鍦烘櫙鐨勪竴瑙�
+                            var form = new AlarmTargetAddSceneForm();
+                            form.AddForm(this.zoonID, rowData.listScene);
+                        }
+                    };
+                }
+                //璋冩暣鐪熷疄楂樺害
+                this.listView.AdjustRealHeight(Application.GetRealHeight(23));
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鏁版嵁___________________________
+
+        /// <summary>
+        /// 鑾峰彇璁惧鐨勬墍鏈夌被鍨嬶紝骞舵暣鐞嗘垚姣忎竴琛岀殑鏁版嵁(keys1:鎴块棿ID   Keys2:R鏂囦欢鐨勬暟鍊�)
+        /// </summary>
+        /// <returns></returns>
+        private Dictionary<string, Dictionary<int, uRowInformation>> GetAllListData()
+        {
+            var dicData = new Dictionary<string, Dictionary<int, uRowInformation>>();
+            //鑾峰彇鏈湴瀹夐槻鐨勫満鏅�
+            Dictionary<int, string> dicScene = HdlSafeguardLogic.Current.GetLocalSceneByZoneID(this.zoonID);
+            var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(this.nowSelectFloorId);
+
+            for (int i = 0; i < listRoom.Count; i++)
+            {
+                //鑾峰彇鎴块棿鐨勮澶囧拰鍦烘櫙鏁版嵁
+                var dicRoomData = this.GetRoomDeviceAndSceneData(listRoom[i], dicScene);
+                if (dicRoomData.Count > 0)
+                {
+                    dicData[listRoom[i].Id] = dicRoomData;
+                }
+            }
+            return dicData;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎴块棿閲岄潰鐨勮澶囧拰鍦烘櫙鏁版嵁
+        /// </summary>
+        /// <param name="i_room"></param>
+        /// <param name="dicScene"></param>
+        /// <returns></returns>
+        private Dictionary<int, uRowInformation> GetRoomDeviceAndSceneData(Common.Room i_room, Dictionary<int, string> dicScene)
+        {
+            if (dicScene == null)
+            {
+                //鑾峰彇鏈湴瀹夐槻鐨勫満鏅�
+                dicScene = HdlSafeguardLogic.Current.GetLocalSceneByZoneID(this.zoonID);
+            }
+            var dicRoomData = new Dictionary<int, uRowInformation>();
+
+            for (int j = 0; j < i_room.ListDevice.Count; j++)
+            {
+                var device = Common.LocalDevice.Current.GetDevice(i_room.ListDevice[j]);
+                //濡傛灉閭d釜璁惧宸茬粡娣诲姞浜嗭紝鍒欎笉鍐嶆樉绀�
+                if (device == null || HdlSafeguardLogic.Current.IsAlarmDeviceExist(this.zoonID, device) == true)
+                {
+                    continue;
+                }
+                if (device.Type == DeviceType.AirSwitch//绌烘皵寮�鍏�
+                 || device.Type == DeviceType.DimmableLight//璋冨厜鍣�
+                 || device.Type == DeviceType.ColorDimmableLight//褰╃伅
+                 || device.Type == DeviceType.OnOffOutput//缁х數鍣�
+                 || device.Type == DeviceType.WindowCoveringDevice)//绐楀笜
+                {
+                    string unSelectPath = string.Empty;
+                    string selectPath = string.Empty;
+
+                    var typeInfo = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device);
+                    //鑾峰彇鍥剧墖
+                    Common.LocalDevice.Current.GetDeviceObjectIcon(typeInfo.ConcreteType, ref unSelectPath, ref selectPath);
+                    if (dicRoomData.ContainsKey(typeInfo.BeloneTextId) == false)
+                    {
+                        dicRoomData[typeInfo.BeloneTextId] = new uRowInformation();
+                        dicRoomData[typeInfo.BeloneTextId].IconPath = unSelectPath;
+                    }
+                    dicRoomData[typeInfo.BeloneTextId].listDevice.Add(device);
+                }
+            }
+            for (int j = 0; j < i_room.ListSceneId.Count; j++)
+            {
+                //濡傛灉閭d釜鍦烘櫙宸茬粡娣诲姞浜嗭紝鍒欎笉鍐嶆樉绀�
+                if (dicScene.ContainsKey(i_room.ListSceneId[j]) == true)
+                {
+                    continue;
+                }
+                var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(i_room.ListSceneId[j]);
+                if (sceneUi == null)
+                {
+                    continue;
+                }
+                if (dicRoomData.ContainsKey(R.MyInternationalizationString.uScence) == false)
+                {
+                    dicRoomData[R.MyInternationalizationString.uScence] = new uRowInformation();
+                    dicRoomData[R.MyInternationalizationString.uScence].IconPath = "Scene/SceneIcon.png";
+                    dicRoomData[R.MyInternationalizationString.uScence].listScene = new List<Common.SceneUI>();
+                }
+                dicRoomData[R.MyInternationalizationString.uScence].listScene.Add(sceneUi);
+            }
+            return dicRoomData;
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________
+
+        /// <summary>
+        /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠�
+        /// </summary>
+        public override int FormActionAgainEvent()
+        {
+            //閲嶆柊鑾峰彇鎴块棿鏁版嵁
+            var dicData = this.GetRoomDeviceAndSceneData(this.nowSelectRoom, null);
+            if (dicAllData.Count == 1 && dicData.Count == 0)
+            {
+                //杩欎釜鎴块棿,宸茬粡娌℃湁鍙�夋嫨鐨勪笢瑗夸簡
+                dicAllData.Remove(this.nowSelectRoom.Id);
+
+                //娌℃湁鍙互娣诲姞鐨勭洰鏍�
+                this.ClearBodyFrame();
+                this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotHadAddTarget));
+                return 1;
+            }
+            if (dicData.Count > 0)
+            {
+                //瑕嗙洊缂撳瓨
+                dicAllData[this.nowSelectRoom.Id] = dicData;
+                //閲嶆柊鍒锋柊杩欎釜鎴块棿鐨勮澶囧垪琛�
+                this.InitRowControl(dicData);
+            }
+            else
+            {
+                //杩欎釜鎴块棿,宸茬粡娌℃湁鍙�夋嫨鐨勪笢瑗夸簡
+                dicAllData.Remove(this.nowSelectRoom.Id);
+                //娓呯┖bodyFrame
+                this.ClearBodyFrame();
+                //鍒囨崲鍒板埆鐨勬埧闂�
+                this.InitRoomAndDeviceControl();
+            }
+
+            return 1;
+        }
+
+        #endregion
+
+        #region 鈻� 鑷畾涔夌粨鏋勪綋_______________________
+
+        /// <summary>
+        /// 姣忎竴琛岀殑琛屾暟鎹�
+        /// </summary>
+        private class uRowInformation
+        {
+            /// <summary>
+            /// 鍥炬爣鍦板潃
+            /// </summary>
+            public string IconPath = string.Empty;
+            /// <summary>
+            /// 璁惧鍒楄〃淇℃伅
+            /// </summary>
+            public List<CommonDevice> listDevice = new List<CommonDevice>();
+            /// <summary>
+            /// 鍦烘櫙
+            /// </summary>
+            public List<Common.SceneUI> listScene = null;
+        }
+        #endregion
+    }
+}

--
Gitblit v1.8.0